【问题标题】:Deleting files and then deleting the parent directory删除文件,然后删除父目录
【发布时间】:2017-02-08 00:42:40
【问题描述】:

我的 Java Windows 应用程序将特定问题的数据保存在文件 aProblem.db 中,该文件位于同名目录(文件夹)中,例如 Documents\MyApplication\aProblem\aProblem.db。我希望用户能够在不离开应用程序的情况下删除问题。所以 aProblem.db 文件必须被删除,如果 aProblem 目录为空,它也应该被删除。因为 FileChooser 不允许删除文件(至少从我阅读文档来看),我用选择框、确定按钮和取消按钮构建了自己的对话框。通过在 MyApplication 中搜索包含文件 x.db 的所有目录 x 来填充选择框。

下面的代码是删除部分,用户做出选择并点击OK后。它可以工作,除非在 Windows 资源管理器中打开目录,尝试删除目录时抛出异常。我知道这是因为资源管理器锁定了它,但我想避免要求用户在资源管理器中关闭它并重试。这可能吗?

注意:我使用 JFileChooser.APPROVE_OPTION,但不要使用 JFileShooser。

           int resp = dialog.showOpenDialog(); 
        if(resp == JFileChooser.APPROVE_OPTION){
            strConcoursFolderPath = dialog.getSelectedFolderFullPath();
            int response = yesNoDialog("Do you really want to delete " + strConcoursFolderPath + "?");
            if(response == JOptionPane.YES_OPTION) {
               File dir = new File(strConcoursFolderPath);
               boolean dirExist = dir.exists() && dir.isDirectory();
               if(dirExist) {
                   String strDbFile = dialog.getSelectedFolderName() + ".db";
                   File db = new File(dir + "\\" + strDbFile);
                   if(db.exists()) db.delete();
                   File[] listOfFiles = dir.listFiles();
                   if(listOfFiles.length == 0) dir.delete();
               }  
            }

        } else {
            //okDialog("Cancel button clicked");
        }

【问题讨论】:

标签: java windows directory delete-file


【解决方案1】:

我编写了一些可以用作模板的伪代码。

    File directory = new File(/* current directory you are viewing files in JFileChooser  */);

    if (directory.exists()) {

        //List our content within this directory.
        File[] files = directory.listFiles();

        //Select file to delete.

        //If contents is empty it'll delete the directory.
        if (files.length == 1) {
            directory.delete();
        }
    }

这应该根据您在帖子中描述的内容来解决问题。我们检查文件内容是否为 1 仅仅是因为在删除文件时,您将永远不会遇到要删除文件且目录内容等于 0 的情况。因此,我们检查这是否是目录中的最后一个文件,然后在删除最后一个文件时删除该目录。

【讨论】:

  • 谢谢,但我无法理解这如何应用于我的问题,可能是因为我没有很好地解释它。但是,正如您所见,“问题”并不存在!
  • @EdS 抱歉,我想我没有正确解释。
【解决方案2】:

答案“从未真正发生过”。有一个不相关的错误,修复后问题无法复制。 IOW,无论导演是否在资源管理器中打开,我的代码都可以正常工作。

对不起

埃德

【讨论】:

    猜你喜欢
    • 2011-03-27
    • 2021-02-19
    • 1970-01-01
    • 2013-01-07
    • 1970-01-01
    • 2020-11-26
    • 2013-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多