1, 如下代码所示
File dir = new File("root");
File f1 = new File("root");
// 文件对象创建后,指定的文件或目录不一定物理上存在
if(!dir.exists()) { //A
dir.mkdir(); //B
dir.createNewFile(); //C
}
if(!f1.isFile()) { //D
f1.createNewFile(); //E
}
logger.info(" " + dir.isDirectory());
logger.info(" " + dir.isFile());
logger.info(" " + f1.isDirectory());
logger.info(" " + f1.isFile());
打印的日志信息依次为:
2018-07-22 15:37:22 [http-nio-8080-exec-1] INFO org.slf4j.LoggerFactory - true
2018-07-22 15:37:31 [http-nio-8080-exec-1] INFO org.slf4j.LoggerFactory - false
2018-07-22 15:37:35 [http-nio-8080-exec-1] INFO org.slf4j.LoggerFactory - true
2018-07-22 15:37:37 [http-nio-8080-exec-1] INFO org.slf4j.LoggerFactory - false
分析:
A: 当代码执行到A处时,因为名为root的目录或文件都不存在,判断结果为true,执行if代码块中代码
B: 所以会先执行B处代码,B会被执行成功,即成功创建名为root的目录
C:当执行C处代码时,因为已存在名为root的目录,就不能再创建名为root的文件(注:同一级文件系统下不允许同时存在相同名子的目录或文件,目录名和文件名也不能相同【带后缀的目录“root.txt”和文件“root.txt”也不能同时存在】
但是root.txt和root可以同时存在,因为“root.txt”和“root”会被判断两个不同的名子)
D:执行D处代码时,因为名为root的文件不存在(虽然名为root的目录已存在),所以会判断为true,执行E处代码
E:当代码执行到E时,也是因为已存在名为root的目录,所以并不能再成功创建名为root的文件
一、最终结果是对应的文件系统目录中中只存在名为root的文件夹,并不存在名为root的文件!
所以dir和f1都是文件夹,而不是文件。
二、另外也可以看出,虽然root的目录只被句柄创建了,而不是被f1创建的,
但是判断f1类型时,依然是将f1指向了dir创建的同名的文件夹,也就是判断一个句柄是否是文件或文件夹,是根据创建是指定的“root”名在当前目录中的类型决定的。如下,虽然f2没有被创建,但是类型依然和同名的dir一样:
但是如果上图中f2和dir传的字符串不同时,f2不被创建则f2既不是目录也不是文件
2,File (String parent , String child)
例:File f2=new File(“D:\\dir","test.txt") ;// 注意:D:\\dir目录事先必须存在,否则异常
如下代码:
File dir = new File("root");
File f2 = new File(dir, "test.txt");
if(!f2.isFile()) {
f2.createNewFile();
}
logger.info(" " + dir.isDirectory());
logger.info(" " + dir.isFile());
logger.info(" " + f2.isDirectory());
logger.info(" " + f2.isFile());
return "server .... test ...";
在创建文件f2时,也会报错:No such file or directory,因为root目录并不存在,所以应该先按顺序创建root目录,如下所示:
File dir = new File("root");
File f2 = new File(dir, "test.txt");
if(!dir.exists()) {
dir.mkdir();
}
if(!f2.isFile()) {
f2.createNewFile();
}
logger.info(" " + dir.isDirectory());
logger.info(" " + dir.isFile());
logger.info(" " + f2.isDirectory());
logger.info(" " + f2.isFile());