問題は、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 で拡張子が表示されないファイルでは失敗します。ls
bashターミナルで実行して、ファイルに実際に拡張子があることを確認しました。
編集2:
Finder で「すべてのファイル名拡張子を表示」をオンにすると、JFileChooser が拡張子付きのファイル名を返すようになりました。これは、JFileChooser の基礎となる実装の設計エラーのようです。私の場合、これは平均的なユーザーを対象とした消費者製品であるため、それは問題の解決には実際には役立ちません.