我需要使用
fileChooser.getSelectedFile()
然而,方法总是返回语言修改路径,因为某些目录在osX中被翻译。例如文件夹“/ Downloads”被翻译成我的系统语言“/Stiahnuté”,但真正的路径是“/ Downloads”
返回:
/Users/John/Stiahnuté
期望
/Users/John/Downloads
如果我选择了一些子目录,那么fileChooser.getSelectedFile()会再次返回正确的路径。看起来始终只有路径中的最后一个目录被翻译
/Users/John/Downloads/subDirectory
代码:
saveButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileFilter(new FolderFilter());
fileChooser
.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
if (fileChooser.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) {
File selectedFile = fileChooser.getSelectedFile();
System.out.println("save path: "
+ selectedFile.getPath());
doSomething(selectedFile);
}
}
});
更新
我做了一点解决方法,但这不是完美的解决方案。但它对我有用。
JFileChooser fileChooser = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter(
"Directories", "dir");
fileChooser.setFileFilter(filter);
if (fileChooser.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) {
File selectedFile = fileChooser.getSelectedFile();
File newDir = new File(selectedFile.getPath());
if (!newDir.exists()) {
newDir.mkdir();
}
doSomething();
}
答案 0 :(得分:1)
我可以使用Java 1.8.0_66在Mac OS X 10.11.4上重现该问题。对我来说,这似乎是JFileChooser
实现中的一个错误(或至少是意外的行为)。您可以针对该问题打开错误报告。
在answer explaining to use FileDialog
to get a operating system native file chooser和另一个answer about using it to select directories的帮助下,我找到了以下解决方法:
final Frame parent = …; // can be null
System.setProperty("apple.awt.fileDialogForDirectories", "true");
final FileDialog fileDialog = new FileDialog(parent);
fileDialog.setVisible(true);
System.setProperty("apple.awt.fileDialogForDirectories", "false");
final File selectedDirectory = new File(fileDialog.getDirectory(), fileDialog.getFile());
System.out.println(selectedDirectory);
System.out.println(selectedDirectory.exists());
请注意,使用"apple.awt.fileDialogForDirectories"
当然是特定于平台的,不适用于其他操作系统。