ファイルを保存するためのダイアログを作成するために java.awt.FileDialog を使用しています。問題は、提案された (既定の) ファイル名を指定すると、FileDialog がその拡張子を削除することです。例:
import java.awt.*;
import java.io.*;
public class SaveFile {
public static void main(String[] args) {
FileDialog fileDialog = new FileDialog(new Frame(), "Save", FileDialog.SAVE);
fileDialog.setFilenameFilter(new FilenameFilter() {
public boolean accept(File dir, String name) {
return name.endsWith(".txt");
}
});
fileDialog.setFile("Untitled.txt");
fileDialog.setVisible(true);
System.out.println("File: " + fileDialog.getFile());
}
}
FileDialog が表示されたとき、デフォルトのファイル名は「Untitled.txt」ですが、代わりに「Untitled」になっていると思います。ユーザーが [保存] をクリックすると、拡張子のないファイル名が返されます。FileDialog は、Windows と OS X の両方でこれを行います。
理解できません。FileDialog が意図的に拡張子を削除するのはなぜですか? これには何らかの論理的な理由がありますか?ドキュメントはそれについて議論していません。回避策として、FileDialog が返す文字列に拡張子を追加するだけで済みますが、それでもバグのようです...
(JFileChooser は使用できないことに注意してください。ネイティブの AWT FileDialog が必要です。)