在Java中保存FileDialog剥离初始文件扩展名

voc*_*aro 8 java filedialog awt

我正在使用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());
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望当FileDialog出现时,默认文件名是"Untitled.txt",而只是"Untitled".当用户单击"保存"时,我会返回没有扩展名的文件名.FileDialog在Windows和OS X上执行此操作.

我不明白.为什么FileDialog故意剥夺扩展名?这有什么合理的理由吗?文档没有讨论它.作为一种解决方法,我可以简单地将扩展名添加到FileDialog返回的字符串中,但是,这似乎是一个错误......

(请注意,我不能使用JFileChooser;我需要本机AWT FileDialog.)

Tom*_*don 2

在使用 Sun Java 1.5 和 1.6 的 Windows 7 上,这种情况不会发生。

我得到的行为稍微取决于 Windows 资源管理器中“隐藏已知文件类型的扩展名”的设置。如果打开了该选项,那么我不会像您所期望的那样在文件对话框中看到扩展名,但它确实会返回完整的文件名。

编辑:意识到我对 AWT 和本机小部件的看法是错误的——混淆了 AWT 和 Swing。