2
    Path path = Paths.get("D:/tmp/a/aa/aaa");
    Files.delete(path);
    path = Paths.get("D:/tmp/a/aa");
    Files.delete(path);

これが私が得ている例外です:

Exception in thread "main" java.nio.file.DirectoryNotEmptyException: D:\tmp\a\aa
  at sun.nio.fs.WindowsFileSystemProvider.implDelete(WindowsFileSystemProvider.java:264)
  at sun.nio.fs.AbstractFileSystemProvider.delete(AbstractFileSystemProvider.java:103)
  at java.nio.file.Files.delete(Files.java:1077)
  at test.Test.main(Test.java:44)

ただし、フォルダー内にファイル/フォルダーはありませんaa

この動作は、Windows エクスプローラー (ここ) を使用してフォルダーにアクセスし、ルート ディレクトリaaに移動したときに観察されます。D:\

エクスプローラー ウィンドウを閉じると、このプログラムは正常に動作します。

Windowsがフォルダーをロックすることがあることは知っていますが、その場合でも例外メッセージjava.nio.file.DirectoryNotEmptyException: D:\tmp\a\aaが間違っているようです

4

2 に答える 2

3

はい、エラーメッセージは間違っていますが、別のプロセスがハンドルを開いている場合、Windowsはファイルまたはフォルダーを削除できません。これは、Java から修正することはできません。

于 2013-02-05T10:43:39.883 に答える
2

もう 1 つのヒントは、「\\」の代わりに「/」を使用することです。Java はプラットフォームに依存しないはずですが、「/」は Linux と Windows の両方で認識されます。

于 2013-02-05T10:46:59.693 に答える