问题是由JFileChooser
返回的File
对象具有不完整的文件名。更确切地说,它返回没有文件扩展名部分的文件名。我尝试使用getPath
,getAbsolutePath
和getCanonicalPath
检索路径,但它仍返回没有扩展部分的相同路径。相同的程序和代码在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底层实现中的设计错误。这对解决问题并没有什么帮助,因为在我的情况下,这是针对普通用户的消费产品。
我之间切换怀疑Apple JVM中存在如此严重的问题。你能发布一个完整的例子来重现这个问题吗?愚蠢的问题,但是,你确定你选择的文件有一个扩展名? – 2012-07-12 08:28:12
@Guillaume Polet请参阅我编辑的半完整示例,是的,文件扩展名显示在终端(目录列表)中,但不显示在OSX的Finder程序中。这应该不是一个问题国际海事组织,Windows不会在默认情况下在资源管理器中显示文件扩展名。 – m0s 2012-07-12 08:59:05
我不知道会发生什么,如果你有两个文件具有相同的名称和不同的(不可见的)扩展名。这两个文件是否被认为是相同的? – 2012-07-12 09:56:32