ファイルが空の場合、ベースディレクトリに到達するまでファイルを削除する簡単な方法を実行しようとしていますが、機能させることができません。
ファイルとその親ディレクトリを削除しますが、次の親はDirectoryNotEmptyException
. 子ディレクトリは 1 つしかなく、前の繰り返しで削除されたため、実際には空です。
そのため、ファイルが削除され、その親が削除され、そこで停止します。上位のディレクトリは削除されません。
編集済み: (変更されたコード)
ディレクトリの削除に遅延が発生しているようで、次のディレクトリの空き状態のチェックでは、前のディレクトリがまだ削除されていません。そのため、ディレクトリが存在しなくなるまでチェックする 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());
}
誰かがより良い解決策を提供できる場合、質問はまだ承認待ちです。ありがとう。