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

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