最近,在看代码时看到了一个方法, File.createTempFile() ,由此联想到File.createNewFile() 方法,一时间不知道两者到底有什么区别,感觉都是创建新文件嘛,后来查看api文档介绍,并经过自己动手试验,终于有了一个较为清楚地认识。 
1. File 的 createNewFile() 方法:  
      createNewFile();返回值为 boolean; 
方法介绍:当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。 
使用:
File file = new File("D:\\test\\1.txt"); 
boolean res = file.createNewFile(); 
if(!res)System.out.println("创建失败!"); 

如果D:/test 目录下没有 1.txt文件,则创建该文件;如果没有test目录,直接抛出异常,如果1.txt已经存在,那么文件创建失败。 
可以得知,createNewFile() 方法,根据抽象路径创建一个新的空文件,当抽象路径指定的文件存在时,创建失败。 

2. File 的 createTempFile() 方法 

该方法有两种调用方式: 
createTempFile(String prefix, String suffix); 
在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称。 
createTempFile(String prefix, String suffix, File directory); 
在指定目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。 

File file2 = new File("D:\\temp");// D;/temp 为一个目录 
File tempFile1= file2.createTempFile("msg", ".tmp",file2); 
File tempFile2 = file2.createTempFile("msg", ".tmp"); 

System.out.println(tempFile2.getAbsolutePath()); 

public static void main(String[] args) {
String ticket = UUID.randomUUID().toString();
try {
File file = File.createTempFile(String.join("", "tmp", ticket.replaceAll("-", "")), ".xlsx");
System.out.println(file.getAbsolutePath());
} catch (IOException e) {
e.printStackTrace();
}
}

mac 下打印的结果是:

/var/folders/hp/gjfwlhl162x729ljrtgz9n380000gn/T/tmpd4405704ab0a44c7995fde41b27896ab8696768970239222800.xlsx

可以这么认为,createTempFile() 方法,在指定的目录下创建一个temp文件,directory 类型为File ,如果路径不存在,则创建失败。createTempFile(String prefix, String suffix);
windows下,createTempFile方法默认的保存路径为:C:\Documents and Settings\Administrator\Local Settings\Temp 。