java知识

1. java 中 byte[]、File、InputStream 互相转换

1. 将File、FileInputStream 转换为byte数组:
File file = new File("test.txt");
InputStream input = new FileInputStream(file);
byte[] byt = new byte[input.available()];
input.read(byt);
2. 将byte数组转换为InputStream:
byte[] byt = new byte[1024];
InputStream input = new ByteArrayInputStream(byt);
3. 将byte数组转换为File:
File file = new File('');
OutputStream output = new FileOutputStream(file);
BufferedOutputStream bufferedOutput = new BufferedOutputStream(output);
bufferedOutput.write(byt);

2. 文件最后修改时间

Long a=file.lastModified();

3. 查看class编译的版本

javap -v Test.class | grep major
J2SE 8 = 52,
J2SE 7 = 51,
J2SE 6.0 = 50,
J2SE 5.0 = 49,
JDK 1.4 = 48,
JDK 1.3 = 47,
JDK 1.2 = 46,
JDK 1.1 = 45

4. Java创建文件并写入内容

public void createFile() throws IOException {
    String filePath = "D:/a/b";
    File dir = new File(filePath);
    // 一、检查放置文件的文件夹路径是否存在,不存在则创建
    if (!dir.exists()) {
        dir.mkdirs();// mkdirs创建多级目录
    }
    File checkFile = new File(filePath + "/filename.txt");
    FileWriter writer = null;
    try {
        // 二、检查目标文件是否存在,不存在则创建
        if (!checkFile.exists()) {
            checkFile.createNewFile();// 创建目标文件
        }
        // 三、向目标文件中写入内容
        // FileWriter(File file, boolean append),append为true时为追加模式,false或缺省则为覆盖模式
        writer = new FileWriter(checkFile, true);
        writer.append("your content");
        writer.flush();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (null != writer)
            writer.close();
    }
}

5. double型转化成int型

一个变量 double x;
不进行四舍五入操作:
(int)x
进行四舍五入操作:
Integer.parseInt(new java.text.DecimalFormat(“0.00”).format(x))

6. FileWriter(Java)以UTF-8格式编写文件

FileWriter fw = new FileWriter("filename.txt", Charset.forName("utf-8")); java11
Writer out = new BufferedWriter( new OutputStreamWriter(new FileOutputStream(this.outputFilename),”UTF-8″)); old java

7. 奇偶数的判断

(1) 通过a%2!=0来判断。
(2) 通过(a&1)==1来判断。(推荐使用,位操作,性能更优)

8. 数组的快速定义

List<String> numbers = Arrays.asList("1", "2", "3");

9. String根据空格分割内容的正确做法

String s3 = "我   是 一个         好  人啊";
String [] spString = s3.split("\\s+");
for(String ss : spString){
    System.out.println(ss);
}



一个

人啊

10. 获取当前时间

long startMili=System.currentTimeMillis(); 当前时间对应的毫秒数

11. 定时器的使用

/**
* 这个方法是调度一个task,经过2000(ms)后开始进行调度,仅仅调度一次。
*/
public static void timer1(){
Timer nTimer = new Timer();
nTimer.schedule(new TimerTask() {
    @Override
    public void run() {
    System.out.println("----设定要指定任务-----");
    }
},2000);
}

/**
* 在指定的时间点time上调度一次。
*/
public static void timer2() {
    Timer timer = new Timer();
    timer.schedule(new TimerTask() {
        public void run() {
        System.out.println("-------在指定的时间点time上调度一次。--------");
        }
    }, time);
}

/**
* 延迟5000毫秒,每1000毫秒执行一次
* 在5000(ms)后开始调度,每次调度完后,最少等待1000(ms)后才开始调度。
*/
public static void timer3() {
    Timer timer = new Timer();
    timer.scheduleAtFixedRate(new TimerTask() {
        public void run() {
        System.err.println("-------延迟5000毫秒,每1000毫秒执行一次--------");
        }
    }, 5000, 1000);
}
/**
* 设置17:56执行任务(第一次调度的时间),每过一天执行一次
* java.util.Timer.scheduleAtFixedRate(TimerTask task, Date firstTime, long period)
*/
public static void timer4() {
    Calendar calendar = Calendar.getInstance();
    calendar.set(Calendar.HOUR_OF_DAY, 17);
    calendar.set(Calendar.MINUTE, 26);
    calendar.set(Calendar.SECOND, 0);

    Date time = calendar.getTime();

    Timer timer = new Timer();
    timer.scheduleAtFixedRate(new TimerTask() {
        public void run() {
        System.out.println("-------设定要指定任务--------");
        }
    }, time, 1000 * 60 * 60 * 24);// 这里设定将延时每天固定执行
}

12. Stack类

栈是Vector的一个子类,它实现了一个标准的后进先出的栈。
堆栈只定义了默认构造函数,用来创建一个空栈。 堆栈除了包括由Vector定义的所有方法,也定义了自己的一些方法。
Stack<Integer> s1 = new Stack<Integer>()

  1. boolean empty(), 测试堆栈是否为空。
  2. Object peek( ), 查看堆栈顶部的对象,但不从堆栈中移除它。
  3. Object pop( ), 移除堆栈顶部的对象,并作为此函数的值返回该对象。
  4. Object push(Object element), 把项压入堆栈顶部。
  5. int search(Object element), 返回对象在堆栈中的位置,以 1 为基数。

13. char的比较

char是一个基本数据类型,只能用”==”进行值相等比较,如果想用equals()方法进行比较,则要用char的封装对Character。

//char是基本类型,没有equals()方法,只能用"=="来进行比较。
char c1 = 'a';
char c2 = 'a';
System.out.println(c1 == c2);   //true,c1和c2是同一个字符常量'a'的引用,是同一个对象地址,所以相同。

//如想用equals()方法,则可以用char的封装对象Character。下面就与String是一模一样的了,如下:
Character c3 = 'a';
Character c4 = 'a';
System.out.println(c3 == c4);  // true,c3和c4是同一个字符串常量'a'的引用,是同一个对象地址,所以相同。
System.out.println(c3.equals(c4));  //true,equals()方法只是比较两个字符串的值是否相等,地址不会进行比较,两个字符串的值都是a,所以相等。

c3 = new Character('a');
c4 = new Character('a');
System.out.println(c3 == c4);  // false,c3和c4是两个不同的对象,虽然字符串值都是a,但是对象地址不同,用==比较的话不相同。
System.out.println(c3.equals(c4));  //true,equals()方法只是比较两个字符串的值是否相等,地址不会进行比较。

14. 字符串中是否含有特殊字符

//string 为要判断的字符串 
public static boolean isConSpeCharacters(String string){ 
    if(string.replaceAll("[\u4e00-\u9fa5]*[a-z]*[A-Z]*\\d*-*_*\\s*","").length()==0){ 
        //不包含特殊字符 
        return false; 
    } 
    return true; 
} 

// \u4E00-\u9FA5 匹配所有汉字
// A-Za-z0-9 匹配 带小写字母和数字

15. 移动文件到指定的目录

try {
    File afile = new File("C:\\test_1\\test.txt");
    if (afile.renameTo(new File("C:\\test_2\\" + afile.getName()))) {
        System.out.println("File is moved successful!");
    } else {
        System.out.println("File is failed to move!");
    }
} catch (Exception e) {
    e.printStackTrace();
}

16. 获取文件后缀

import org.apache.commons.io.FilenameUtils
String fileType = FilenameUtils.getExtension(fileName).toLowerCase();

17. 运行jar包main函数

java -cp xxx.jar xxx.com.xxxx  //它会找到这个类的main函数,开始执行, 其中-cp命令是将xxx.jar加入到classpath,这样java class loader就会在这里面查找匹配的类。

//在MANIFEST.MF里配置了Main-Class,可以直接执行jar文件
java -jar xxx.jar

17. maven项目导出项目依赖的jar包

mvn dependency:copy-dependencies -DoutputDirectory=lib
-DincludeScope=compile 设置依赖级别

18. java中的几种实体类对象(PO,VO,DAO,BO,POJO)

  1. PO(persistant object),持久对象 可以看成是与数据库中的表相映射的java对象。使用Hibernate来生成PO是不错的选择。
  2. VO(value object) ,值对象 通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已
  3. DAO(Data Access Objects),数据访问对象接口
  4. BO(Business Object),业务对象层 表示应用程序领域内“事物”的所有实体类。这些实体类驻留在服务器上,并利用服务类来协助完成它们的职责。
  5. POJO(Plain Old Java Objects),简单的Java对象