我编写了一个递归删除目录及其内容的方法。 代码在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目录中结束时会消失。
答案 0 :(得分:2)
好的,我已经解决了......
我不是Java问题,而是Lotus Notes / Domino问题。
这句长句:
当Lotus Notes / Domino线程创建文件夹&#34; A&#34;并使用LotusScript mkdir
,rmdir
和其他IO方法在其中执行一些文件,然后执行尝试删除文件夹的Java VM&#34; A&#34;包含所有文件,父线程(Lotus Notes / Domino)损坏并丢失目录结构句柄,导致上述错误。
在Java完成文件夹删除后,问题的解决方案是简单的Dir$()
语句。
执行Dir$()
时,幻像文件夹消失。
可能是因为Dir$()
调用刷新并释放了应该在内部刷新和释放的内容。
答案 1 :(得分:-1)
Java可能不是解决此问题的最佳语言。您可以使用批处理文件编程在一行中执行此操作:rmdir <directory-to-completely-remove> /s /q
。如果您绝对必须在Java中执行此操作,那么您可以在Windows上的Java程序中运行此命令:Runtime.getRuntime().exec("cmd /C start /min cmd.exe /K \"rmdir <directory-to-remove> /s /q & exit\"");