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

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

最佳答案

我可以在使用 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/

相关文章:

java - 字节/短 Vs int 作为循环计数器变量

java - JdbcTemplate - 没有可用类型的合格 bean

java - 在 Java 中使用 PrintWriter 打印到文件无法使用文件名

java - Eclipse 中的控制台输出颜色

java - 我如何确定我的 JVM 中每一代堆的大小?

java - 如何从外部 JAR 加载 Hibernate 实体

java - 如何处理 RxJava 中观察者的 onNext 抛出的异常?

Java:生成一个随机值,然后将另一个变量中的值加1

java - HttpServlet 的getParameter ("param") 有传值时返回null

java - java中的哈希表 "Unresolved compilation"