删除文件,然后删除父目录

时间:2017-02-08 00:42:40

标签: java windows directory delete-file

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

在用户进行选择并单击“确定”后,下面的代码是删除部分。它的工作原理除了在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");
        }

2 个答案:

答案 0 :(得分:0)

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

    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只是因为在删除文件时,您从未进入过删除文件和文件的情况。目录的内容等于零。因此,我们检查这是否是目录中的最后一个文件,然后在删除最后一个文件时删除该目录。

答案 1 :(得分:0)

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

抱歉