我编写了一个程序,用于使用Java NIO 2功能删除包含所有子文件夹和文件的文件夹。在没有打开窗口浏览器的情况下,程序运行平稳。但是,当打开Window Explorer时(即删除文件夹是“E:\ Error”,并且我停留在“E:”),它会引发错误。下面是测试文件夹的结构:Java NIO 2 - 删除文件夹进度 - 如果窗口资源管理器正在打开,则发生错误
"E:\Error\Error0\Error1\Error2\Error3\Error4\Error5\Error6\Error7\Error8\Error9"
有两个文件:“TEXT.TXT”和“Text2.txt”中的“误差2”文件夹中。
这是我的课:
public class FileVisitorForTest extends SimpleFileVisitor<Path> {
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
System.out.println(dir);
Files.delete(dir);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
Files.delete(file);
return FileVisitResult.CONTINUE;
}
public static void main(String[] args) throws IOException {
Path targetFolder = Paths.get("E:\\Error");
Files.walkFileTree(targetFolder, new FileVisitorForTest());
}
}
错误显示在控制台当我与窗口文件浏览器在打开运行程序:
Exception in thread "main" java.nio.file.DirectoryNotEmptyException: E:\Error\Error0\Error1
at sun.nio.fs.WindowsFileSystemProvider.implDelete(WindowsFileSystemProvider.java:265)
at sun.nio.fs.AbstractFileSystemProvider.delete(AbstractFileSystemProvider.java:103)
at java.nio.file.Files.delete(Files.java:1077)
at nio.FileVisitorForTest.postVisitDirectory(FileVisitorForTest.java:13)
at nio.FileVisitorForTest.postVisitDirectory(FileVisitorForTest.java:10)
at java.nio.file.FileTreeWalker.walk(FileTreeWalker.java:224)
at java.nio.file.FileTreeWalker.walk(FileTreeWalker.java:199)
at java.nio.file.FileTreeWalker.walk(FileTreeWalker.java:199)
at java.nio.file.FileTreeWalker.walk(FileTreeWalker.java:69)
at java.nio.file.Files.walkFileTree(Files.java:2600)
at java.nio.file.Files.walkFileTree(Files.java:2633)
at nio.FileVisitorForTest.main(FileVisitorForTest.java:25)
请帮我了解这个情况。谢谢你们!
Ps:我的操作系统是Windows 7 64位。
public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
Files.delete(dir);
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
return FileVisitResult.CONTINUE;
}
,但我仍然不知道为什么:
更新:此错误可以通过在postVisitDirectory增加一个线程来克服()方法是这样的。
感谢您的快速评论,但在这种情况下,我没有打开包含删除文件夹的驱动器。该文件夹在驱动器E:但我打开驱动器C:上的窗口文件浏览器。 – programer310