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