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的文件(注:同一级文件系统下不允许同时存在相同名子的目录或文件,目录名和文件名也不能相同【带后缀的目录“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一样:

java new File创建文件或目录时的注意事项_第1张图片

但是如果上图中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());

 

你可能感兴趣的:(java,file,01,JAVA,源码解读)