Java file.getPath()返回语言修改的路径

时间:2016-05-02 23:24:15

标签: java

我需要使用

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();
                }

1 个答案:

答案 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"当然是特定于平台的,不适用于其他操作系统。