我需要用
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();
}
最佳答案
我可以在使用 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"
当然是平台特定的,不适用于其他操作系统。
关于Java file.getPath() 返回语言修改路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36993169/