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

192 篇文章 13 订阅
49 篇文章 0 订阅

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值