问题是File
返回的JFileChooser
对象的文件名不完整。更确切地说,它返回没有文件扩展名部分的文件名。我尝试使用getPath
,getAbsolutePath
和getCanonicalPath
检索路径,但它仍返回相同的路径而没有扩展部分。相同的程序和代码在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没有显示扩展名的文件,这会失败。我已经通过在bash终端中执行ls
来检查文件是否实际具有扩展名。
编辑2:
在Finder中启用“显示所有文件扩展名”后,JFileChooser开始返回带扩展名的文件名。这看起来像是JFileChooser底层实现中的设计错误。这并没有真正帮助解决问题,因为在我的情况下,这是针对普通用户的消费产品。
答案 0 :(得分: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());
}
}
答案 1 :(得分:0)
这似乎是发现者的一个特征。
如果我在Finder中关闭扩展程序,我会获得扩展名,如果我在Finder中隐藏扩展程序,我不会
查看http://www.fileinfo.com/help/mac_show_extensions以了解如何在两者之间切换