我正在尝试打开一个JFileChooser
对话框,让用户决定他的愿望目录以便进行以下操作。
以下是我目前的代码:
JFileChooser chooser;
if(pref.get("LAST_PATH", "") != null){
chooser = new JFileChooser(pref.get("LAST_PATH", ""));
} else{
chooser = new JFileChooser(home_dir);
}
//chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
chooser.setAcceptAllFileFilterUsed(false);
int retVal = chooser.showOpenDialog(frame);
System.out.println("getCurrentDirectory(): " + chooser.getCurrentDirectory().toString());
home_dir是一个指向用户Download-directory的静态String。
我不明白的行为:
home_dir = C:/Users/Scy/Downloads
按OK而不选择任何文件(或目录)
Output: C:/Users/Scy
home_dir = C:/Users/Scy/Downloads
选择下载
中的任何文件Output: C:/Users/Scy/Downloads
为什么在没有选择任何内容而只是按OK时我没有得到全路径(C:/Users/Scy/Downloads
)作为输出? (激活DIRECTORIES_ONLY
后,如果没有DIRECTORIES_ONLY
选择任何内容,则无法按“确定”
编辑:我刚注意到,当我只是按下取消按钮而没有选择任何内容时,输出确实是我所期望的,C:/Users/Scy/Downloads
。
根据这篇文章的回答,我尝试了以下内容:
JFileChooser chooser = new JFileChooser();
chooser.setCurrentDirectory(new File(home_dir)); //home_dir = "C:/Users/Scy/Downloads"
结果与上面完全相同。按“取消”按钮将导致完整路径输出,而按“确定/接受”将导致C:/Users/Scy
。
答案 0 :(得分:2)
也许“选定文件”(或目录)位于“当前目录”(您正在检索atm。)?
如果您想要当前选定的文件,chooser.getSelectedFile()
就是您要找的。请记住,当切换到DirectoryOnly模式时,此方法将返回一个目录(例如,表示目录的File实例)。
方法chooser.getCurrentDirectory()
将返回当前所选文件的父目录,该目录解释了意外结果。 (getSelectedFile.getParentFile()
很可能会返回相同的文件)
如果您尝试检索parentDirectory,则设置起始目录不正确。请注意如何在第一个构造函数中传递选定的文件?这意味着在第二个构造函数中,'home_dir'将是所选的文件。如果您只想将'home_dir'设置为起始目录,则应使用no-args构造函数并调用chooser.setCurrentDirector(new File(home_dir))
。以下是您的代码的样子:
JFileChooser chooser;
if(pref.get("LAST_PATH", "") != null){
// set last SELECTED file/directory path.
chooser = new JFileChooser(pref.get("LAST_PATH", ""));
} else{
// set currentDirectory, but dont select anything yet.
chooser = new JFileChooser();
chooser.setCurrentDirectory(new File(home_dir));
}
答案 1 :(得分:1)
getCurrentDirectory()
会返回目录名称,而不是文件名。如果用户选择文件,则此方法返回包含该文件的目录的名称。如果您想要选择的文件名,则应使用getSelectedFile()
。如果您还没有,请阅读this Oracle tutorial on file choosers。