java new File创建文件或目录的区别(重点看红色文字!!)

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的文件
(因为对“File对象”先执行了 dir.mkdir() 所以“root”成为了目录,如果先执行 f1.createNewFile()则“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());

 

转载自,对原文有增加:https://blog.csdn.net/qq_2300688967/article/details/81155285

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章