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夹。

aa当我使用 Windows 资源管理器(此处)访问文件夹并移动到D:\根目录时,会观察到这种行为。

如果我关闭资源管理器寡妇,该程序运行正常。

我知道 Windows 有时会锁定文件夹,即使在这种情况下异常消息java.nio.file.DirectoryNotEmptyException: D:\tmp\a\aa似乎是错误的

4

2 回答 2

3

是的,错误消息是错误的,但 Windows 不会让文件或文件夹被删除,因为另一个进程打开了一个句柄。这无法从 Java 中修复。

于 2013-02-05T10:43:39.883 回答
2

另一个提示,使用“/”而不是“\\”,因为 Java 应该是独立于平台的,而“/”在 linux 和 windows 上都可以识别。

于 2013-02-05T10:46:59.693 回答