从Java删除目录时出现奇怪错误:0字节,访问被拒绝

时间:2014-07-11 14:15:02

标签: java lotus-notes lotus-domino lotusscript

我编写了一个递归删除目录及其内容的方法。 代码在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字节,尝试打开时出现“拒绝访问”错误。

Directory properties

Directory security

编辑:

我是管理员,拥有所有权限,可以从Windows资源管理器转到此文件夹(在Java破坏之前)。 我的问题是有没有人见过这个,这可能是什么原因??

还有一件事: 似乎该目录被立即设置为“DeleteOnExit”而不是“Delete”。 因为当程序在Lotus Notes或Eclipse目录中结束时会消失。

2 个答案:

答案 0 :(得分:2)

好的,我已经解决了......

我不是Java问题,而是Lotus Notes / Domino问题。

这句长句:

当Lotus Notes / Domino线程创建文件夹&#34; A&#34;并使用LotusScript mkdirrmdir和其他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\"");