JFileChooser - 将目录设置为文件中的路径

15

我正在尝试通过类似以下方式(使用commons-io)设置JFileChooser中的目录路径:

String fileContents = IOUtils.toString(new FileInputStream("path.txt"));
File theDirectory = new File(fileContents);

filechooser = new JFileChooser();
fileChooser.setCurrentDirectory(theDirectory);
filechooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

我正在使用getCanonicalPath()获取路径并将其写入文件path.txt

path = file.getCanonicalPath();

我不打算在这里放置全部的代码,但我确定程序会在 path.txt 中写入和读取路径。 我没有得到任何错误,但每次运行程序时它总是在我的文档文件夹中打开 JFilechooser。我做错了什么?


你尝试过打印出theDirectory并检查它是否存在吗? System.out.println(theDirectory.getCanonicalPath() + " exists: " + theDirectory.exists()); 如果文件不存在,则文件选择器将默认为“我的文档”文件夹。 - wolfcastle
6个回答

22

尝试直接在构造函数中传递当前目录:

filechooser = new JFileChooser(theDirectory);

6
如果您使用默认构造函数(即new JFileChooser())并查阅API
构造指向用户默认目录的JFileChooser。该默认值取决于操作系统。在Windows上,它通常是“My Documents”文件夹,在Unix上,它是用户的主目录。
这似乎解释了总是打开“My Documents”的原因,但这不是您的问题。实际上,您的问题在于设置当前目录(即setCurrentDirectory(theDirectory)):
设置当前目录。传入null将文件选择器设置为指向用户的默认目录。该默认值取决于操作系统。在Windows上,它通常是“My Documents”文件夹,在Unix上,它是用户的主目录。如果传入作为currentDirectory的文件不是目录,则其父目录将用作currentDirectory。如果父目录不可遍历,则它将沿着父级树向上遍历,直到找到可遍历目录或到达文件系统的根。
话虽如此,我建议注意突出显示的文本,因为看起来您正在将一个文件设置为当前目录而不是一个目录。

我没有将文件设置为当前目录。我正在尝试使用上次选择的目录设置当前目录。File file = fileChooser.getSelectedFile(); 我想要做的是,即使我关闭程序并再次运行它,也始终使用上次选择的目录打开文件选择器。 - fermk090
1
@fermk090:那么你需要持久化“上次选择的目录”,当你再次运行程序时,加载已持久化的目录。 - mre
我认为他正在这样做。他将位置持久化到“path.txt”中并进行恢复。 - wolfcastle

1
选择您最近打开的最后一个目录:

(保留HTML)
chooser.setCurrentDirectory(lastDirectory);

int r = chooser.showOpenDialog(new JPanel());

if (r == JFileChooser.APPROVE_OPTION) {
   fileName = chooser.getSelectedFile().getPath();
   lastDirectory = chooser.getSelectedFile();
}

1
在你的主类中声明。
public static String dirpath=".";

private void btnBrowseActionPerformed(java.awt.event.ActionEvent evt) {    
 JFileChooser jfc = new JFileChooser(dirpath);
 dirpath =jfc.getSelectedFile().getAbsolutePath().toString();
}

1

JFileChooser Chooser = new JFileChooser("F:");

的翻译是:创建一个文件选择器 Chooser,初始目录为 F 盘。

0

如果您想更改目录,则使用System.getProperty方法

String s=System.getProperty("user.dir");  // changes directory from documents to the user current Directory;

JFileChooser jfc = new JFileChooser(s);

文件选择器 jfc = new 文件选择器(s);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接