我試圖做一個簡單的方法,刪除一個文件的上層目錄,如果它們是空的,直到到達基本目錄,但我不能讓它工作。刪除文件及其父目錄,如果它們爲空。 (Java)
它刪除文件,它的父目錄,但是,它的下一個父項不會被刪除,因爲它會拋出一個DirectoryNotEmptyException
。它真的是空的,因爲只有一個子目錄,並且它在之前的迭代中被刪除。
因此,文件被刪除,其父文件被刪除,並停止在那裏,沒有更多的上層目錄被刪除。
編輯:(修改後的代碼)
似乎有一個延遲刪除目錄,所以在目錄中的空虛狀態的查了下,前一個還沒有被刪除。所以我添加了一個while循環來檢查,直到目錄不存在。我不知道這是否是一種不好的技術,但它適用於我的需求。
public static void removeFileAndParentsIfEmpty(Path path) throws IOException {
if(path == null || path.endsWith(FilesPath.BILLS_DIRECTORY)) {
return;
}
if (Files.isRegularFile(path)){
Files.deleteIfExists(path);
} else if (Files.isDirectory(path)){
if(path.toFile().list().length == 0){
Files.delete(path);
while(Files.exists(path));
}else{
return;
}
} else {
return;
}
removeFileAndParentsIfEmpty(path.getParent());
}
如果有人能提供更好的解決方案,這個問題仍然是開放的批准。 謝謝。
當拋出異常時,方法是否停止,我的意思是,如果Files.delete()拋出DirectoryNotEmptyException,它被捕獲並且方法結束而不做另一個遞歸調用,或者我錯了? – giorgiline
哦,對不起,錯過了重新打電話,我的不好:P – MadProgrammer