我的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");
}
答案 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,无论导演是否在资源管理器中打开,我的代码都能正常工作。
抱歉
版