我编写了递归删除目录及其内容的方法。 代码在 Windows - Eclipse - JVM7 上执行
代码如下:
/**
* Empty and delete a folder with recursion.
*
* @param folder
* folder to empty
*/
public static boolean rmdir(final String folderPath, boolean deleteParent) {
File folder = new File(folderPath);
// check if folder file is a real folder
if (folder.isDirectory()) {
File[] list = folder.listFiles();
if (list != null) {
for (int i = 0; i < list.length; i++) {
File tmpF = list[i];
if (tmpF.isDirectory())
rmdir(tmpF.toString(), true);
tmpF.delete();
}
}
if (deleteParent && !folder.delete()) {
return false;
} else
return true;
}
return false;
}
当代码执行时,没有抛出错误,表示目录已成功删除。 当我打开驱动器确认删除时,我仍然可以看到该文件夹现在大小为 0 字节,并在尝试打开它时出现“访问被拒绝”错误。
编辑:
我是管理员,拥有所有权限,并且可以从 Windows 资源管理器读/写此文件夹(在 Java 破坏它之前)。 我的问题是有人以前见过这个吗?这可能是什么原因?
还有一件事: 似乎该目录立即设置为“DeleteOnExit”而不是“Delete”。 因为当程序结束时Lotus Notes或Eclipse目录就消失了。
最佳答案
好的,我已经解决了这个问题...
我不是 Java 问题,而是 Lotus Notes/Domino 问题。
这是长句子:
当 Lotus Notes/Domino 线程使用 LotusScript mkdir
、rmdir
和其他 IO 方法创建文件夹“A”和其中的一些文件,然后执行 Java VM 尝试删除文件夹“A”及其中的所有文件时,父线程 (Lotus Notes/Domino) 会损坏并丢失目录结构句柄,从而导致上述错误。
问题的解决方案是 Java 完成文件夹删除后的简单 Dir$()
语句。
当执行 Dir$()
时,幻影文件夹消失。
可能是因为 Dir$()
调用刷新并释放了应该在内部刷新和释放的内容。
关于java - 从Java删除目录时出现奇怪的错误: 0 bytes,访问被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24699854/