2

问题是File返回的对象JFileChooser文件名不完整。更准确地说,它返回不带文件扩展名部分的文件名。我尝试使用 检索路径getPathgetAbsolutePathgetCanonicalPath它仍然返回没有扩展部分的相同路径。相同的程序和代码在 Windows、Linux 和 OSX 10.6 上运行良好

该问题出现在带有 Java SE 10.6.0_33-b03-424 的 OSX 10.7.4 上。有谁知道解决这个问题的方法,或者至少可以确认这种情况发生了吗?

编辑:

JFileChooser myImageChooser = new JFileChooser();
myImageChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
int val = myImageChooser.showDialog(NewJFrame.this, "Select Image");

        JFileChooser myImageChooser = new JFileChooser();
        myImageChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
        int val = myImageChooser.showDialog(NewJFrame.this,
                "Select Image");

        if (val == JFileChooser.APPROVE_OPTION) {
            File f = myImageChooser.getSelectedFile();
            System.err.println(myImageChooser.getSelectedFile().getAbsolutePath());
            try {
                System.err.println(myImageChooser.getSelectedFile().getCanonicalPath());
            } catch (IOException ex) {
                Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
            }
            System.err.println(myImageChooser.getSelectedFile().getName());
            System.err.println(myImageChooser.getSelectedFile().getPath());

            //loadImage(f);
            //Util.event("LoadImage", f.getName());
        }

我还注意到一些非常有趣的事情,它适用于某些文件,在 Finder 中具有可见扩展名的相同文件,但对于那些 Finder 不显示扩展名的文件,它会失败。我已经通过ls在 bash 终端中检查文件是否确实具有扩展名。

编辑2:

在 Finder 中打开“显示所有文件扩展名”后,JFileChooser 开始返回带扩展名的文件名。这看起来像是 JFileChooser 底层实现中的设计错误。这并不能真正帮助解决问题,因为在我的情况下,这是针对普通用户的消费产品。

4

2 回答 2

0

我更新了您代码中的某些部分,并得到以下输出:

C:\Users\Arno\Documents\My Games\Skyrim\RendererInfo.txt C:\Users\Arno\Documents\My Games\Skyrim\RendererInfo.txt RendererInfo.txt C:\Users\Arno\Documents\My Games\Skyrim \RendererInfo.txt

这是更新的代码:

JFileChooser myImageChooser = new JFileChooser();
    myImageChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
    int val = myImageChooser.showDialog(null, "Select Image");

    if (val == JFileChooser.APPROVE_OPTION) {
        File f = myImageChooser.getSelectedFile();
        System.err.println(myImageChooser.getSelectedFile()
                .getAbsolutePath());
        try {
            System.err.println(myImageChooser.getSelectedFile()
                    .getCanonicalPath());
        } catch (IOException ex) {

        }
        System.err.println(myImageChooser.getSelectedFile().getName());
        System.err.println(myImageChooser.getSelectedFile().getPath());

        // loadImage(f);
        // Util.event("LoadImage", f.getName());
    }
}
于 2012-07-12T09:07:39.060 回答
0

这似乎是finder的一个功能。

如果我在 Finder 中关闭扩展隐藏,我会得到扩展,如果我在 Finder 中打开扩展隐藏,我不会

查看http://www.fileinfo.com/help/mac_show_extensions了解如何在两者之间切换

于 2012-07-12T10:03:46.620 回答