今天我正忙於java.io.File方法,偶然發現了一些奇怪的東西。無法刪除我在Java中重命名的目錄中的文件?
當我重命名目錄時,我似乎無法刪除文件或新目錄。
File dir = new File("dir");
dir.mkdir();
File file = new File(dir, "afile.txt");
file.createNewFile();
File newname = new File(dir, "newName.txt");
file.renameTo(newname);
File newdir = new File("newdir");
dir.renameTo(newdir);
System.out.println("file exists? " + file.exists());
System.out.println("file deleted? " + file.delete());
System.out.println("newname exists? " + newname.exists());
System.out.println("deleted newname? " + newname.delete());
System.out.println("dir exists? " + dir.exists());
System.out.println("dir deleted? " + dir.delete());
System.out.println("newdir exists? " + newdir.exists());
System.out.println("deleted newdir? " + newdir.delete());
產生了輸出:
file exists? false
file deleted? false
newname exists? false
deleted newname? false
dir exists? false
dir deleted? false
newdir exists? true
deleted newdir? false
在文件系統中,雖然NEWDIR和newname.txt都依然存在!
但是,如果我註釋掉目錄的重命名,刪除工作正常。
delete()和rename()之間是否還需要了解其他規則? javadoc沒有太多。
爲什麼我不能刪除newName.txt? – 2012-01-31 13:48:35
@jonnyfive:因爲它試圖刪除'dir/newName.txt',並且不再存在(你已經將它重命名爲'newdir/newName.txt')。 – NPE 2012-01-31 13:51:08
您需要記住兩件關於java.io.File實例的內容。 1)它們代表路徑名稱而不是文件2)它們是不可變的。這就解釋了你爲什麼要觀察這種行爲。 – Lajcik 2013-09-16 11:41:38