2012-07-12 48 views
2

问题是由JFileChooser返回的File对象具有不完整的文件名。更确切地说,它返回没有文件扩展名部分的文件名。我尝试使用getPathgetAbsolutePathgetCanonicalPath检索路径,但它仍返回没有扩展部分的相同路径。相同的程序和代码在Windows,Linux和OSX上正常工作10.6JFileChooser在OSX 10.7上不返回完整的文件名

OSX 10.7.4上的问题发生在Java SE 10.6.0_33-b03-424上。有没有人知道这方面的解决方法,或者至少可以证实这一点?

编辑:

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中不显示扩展失败。我已经通过在bash终端中执行ls来检查文件实际上是否具有扩展名。

编辑2:

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

+0

我之间切换怀疑Apple JVM中存在如此严重的问题。你能发布一个完整的例子来重现这个问题吗?愚蠢的问题,但是,你确定你选择的文件有一个扩展名? – 2012-07-12 08:28:12

+0

@Guillaume Polet请参阅我编辑的半完整示例,是的,文件扩展名显示在终端(目录列表)中,但不显示在OSX的Finder程序中。这应该不是一个问题国际海事组织,Windows不会在默认情况下在资源管理器中显示文件扩展名。 – m0s 2012-07-12 08:59:05

+0

我不知道会发生什么,如果你有两个文件具有相同的名称和不同的(不可见的)扩展名。这两个文件是否被认为是相同的? – 2012-07-12 09:56:32

回答

0

我在你的代码更新一些地方,我得到这样的输出:

C:\用户\阿诺\ Documents \我的游戏\天际\ RendererInfo.txt C:\用户\阿诺\文件\我的游戏\天际\ RendererInfo.txt RendererInfo.txt C:\用户\阿诺\ Documents \我的游戏\天际\ 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()); 
    } 
} 
+0

你的输出显然来自Windows操作系统:)该问题只发生在Mac OSX – m0s 2012-07-12 09:11:21

+0

@Arno OP声称它可以在Windows上运行。他的问题似乎与MacOSX 10.7和Java6直接相关。 – 2012-07-12 09:11:28

+0

:),是的,我使用Windows PC,对不起,我会寻求更多;) – 2012-07-12 09:11:57

0

这似乎是查找器的一个功能。

如果我把扩展在Finder中隐藏了,我得到了扩展,如果我转分机在Finder中隐藏的,我不

退房http://www.fileinfo.com/help/mac_show_extensions来看看如何在两个

+0

血腥的东西现在的作品!非常令人沮丧> | – MadProgrammer 2012-07-12 10:05:33

+0

这很烦人,我可以重复你的结果,把分机关闭和关闭,现在我总是得到延期 – MadProgrammer 2012-07-12 10:09:03