5

ファイル ツリーをたどって、すべてのファイル/ディレクトリを削除しようとしています。コードは以下のとおりです。

        Files.walkFileTree(metricPath, new SimpleFileVisitor<Path>() {

            @Override
            public FileVisitResult visitFile(Path file,
                                             BasicFileAttributes attrs) throws IOException {
                Files.delete(file);
                return FileVisitResult.CONTINUE;
            }

            @Override
            public FileVisitResult postVisitDirectory(Path dir,
                                                      IOException exc) throws IOException {
                if (exc == null) {
                    Files.delete(dir);
                    return FileVisitResult.CONTINUE;
                } else {
                    throw exc;
                }
            }
        });
    }

このコードは単体テストの合間に実行され、それぞれが個別のファイルを形式で生成しますfolder1/folder2/file。そのツリーをDirectoryNotEmptyExceptionたどろうとすると、間違いなく空ですが、folder1 を削除しようとすると The がスローされます...

4

4 に答える 4

0

そのディレクトリに隠しファイルがあるかどうかを確認しましたか?Windows では、一部のプロセスがこのディレクトリを開き、開いたファイル HANDLE がシステム HANDLE テーブルにまだ存在している可能性があります。その場合、ディレクトリはロックされ、Java はその例外をスローする可能性があります。

于 2013-01-10T19:16:55.533 に答える
0

Apache Commons FileUtils.deleteDirectory() または FileUtils.deleteQuietly() を使用します

于 2020-03-04T10:23:13.267 に答える
0

コードでわかるように、1 つのファイル/フォルダーが読み取り専用モードでない限り、問題はないはずです。削除する前に、まずファイルのアクセス許可を変更することを検討することをお勧めします。

次のオーバーライドに Files.delete() メソッドを配置することもできますか

public FileVisitResult visitFileFailed(パスファイル、IOException exc)

参考: JAVA NIO ディレクトリ削除

于 2013-08-25T04:33:59.483 に答える
-1

または、 Apache Commons IOをインポートして、そのFileUtils.deleteDirectory(File directory)メソッドを使用することもできます。すべてのファイルとサブディレクトリを再帰的に削除するため、1 行で十分です。

FileUtils.deleteDirectory(dirToBeDeleted);
于 2013-01-10T19:36:30.630 に答える