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

Mat*_*osk 9 java

我需要用

fileChooser.getSelectedFile()
Run Code Online (Sandbox Code Playgroud)

但是它始终返回语言修改路径,因为某些目录在osX中被翻译.例如文件夹"/ Downloads"被翻译成我的系统语言"/Stiahnuté",但真正的路径是"/ Downloads"

返回:

/Users/John/Stiahnuté
Run Code Online (Sandbox Code Playgroud)

期望

/Users/John/Downloads
Run Code Online (Sandbox Code Playgroud)

如果我选择一些子目录,则fileChooser.getSelectedFile()将再次返回正确的路径.它看起来总是只翻译路径中的最后一个目录

/Users/John/Downloads/subDirectory
Run Code Online (Sandbox Code Playgroud)

码:

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);
                }
            }
       });
Run Code Online (Sandbox Code Playgroud)

更新:

我做了一点解决方法,但这不是完美的解决方案.但它对我有用.

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();
                }
Run Code Online (Sandbox Code Playgroud)

sie*_*egi 1

我可以在 Mac OS X 10.11.4 上使用 Java 1.8.0_66 重现该问题。对我来说,这看起来像是JFileChooser. 您可以针对该问题打开错误报告。

\n\n

在解释如何使用FileDialog获取操作系统本机文件选择器的答案和有关使用它来选择目录的另一个答案的帮助下,我找到了以下解决方法:

\n\n
final Frame parent = \xe2\x80\xa6; // can be null\n\nSystem.setProperty("apple.awt.fileDialogForDirectories", "true");\nfinal FileDialog fileDialog = new FileDialog(parent);\nfileDialog.setVisible(true);\nSystem.setProperty("apple.awt.fileDialogForDirectories", "false");\n\nfinal File selectedDirectory = new File(fileDialog.getDirectory(), fileDialog.getFile());\nSystem.out.println(selectedDirectory);\nSystem.out.println(selectedDirectory.exists());\n
Run Code Online (Sandbox Code Playgroud)\n\n

请注意,使用"apple.awt.fileDialogForDirectories"当然是特定于平台的,并且不适用于其他操作系统。

\n