1關於file.isFile()與file.isDirectory()
錯誤以為若是Directory一定是file,file不一定是Directory
更正:file和Directory是兩碼事.只能是file或Directory中其中一個.
2並不是說我們執行一句File f=new File("F:\\x.txt");
在本地硬碟上就產生了一個x.txt檔案.而應該進行如下的
操作才可以.
File f=new File("F:\\x.txt");
if (!f.exists()) {
f.createNewFile();
}
其中f.createNewFile()表示建立了一個空檔案
3 對於目錄應該先執行file.mkdir(s)()才可以
往裡面其下存入檔案.比如:
File f=new File("F:\\test\\x.txt");
if (!f.exists()) {
f.createNewFile();
}
這當然要報錯,因為x.txt的所在目錄還不存在!!
所以應該改正為:
File f=new File("F:\\test\\x.txt");
f.getParentFile().mkdirs();
if (!f.exists()) {
f.createNewFile();
}
同樣的道理
File f=new File("F:\\test\\x.txt");
if (f.isFile()) {
System.out.println("true");
}else{
System.out.println("false");
}
結果為false
所以更好的實踐體驗,應該如下:
File file=new File("E:\\zz\\xx\\123.txt");
//1 首先判斷其父檔案是否存在,若不存在則建立
// 不論其父路徑有多複雜都會建立.
// 比如E盤下根本就沒有zz和xx
// 但在此會按該層次建立
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}
//2 再判斷該檔案是否存在,若不存在則建立
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
4 總結兩種與File有關的兩種操作思路
(1)
File f=new File("");
f.createNewFile();
然後對f操作.
這當然沒有錯,因為f已經被建立了
(2)file f=new File("");
然後用輸入輸出資料流進行流操作
例如:
File f=new File("F:\\test.txt");
FileOutputStream fos=new FileOutputStream(f);
String string="hello";
byte []b=string.getBytes();
fos.write(b, 0, b.length);
疑問:
按照(1)中的思路沒有執行f.createNewFile()為什麼不報錯???
因為輸出資料流FileOutputStream已經做了該工作
修改例子即可知:
File f=new File("F:\\2221x.txt");
if (f.isFile()) {
System.out.println("true1");
} else {
System.out.println("false1");
}
FileOutputStream fos=new FileOutputStream(f);
if (f.isFile()) {
System.out.println("true2");
} else {
System.out.println("false2");
}
String string="hello";
byte []b=string.getBytes();
fos.write(b, 0, b.length);
輸出false1,true2
即得到驗證.