如何使JFileChooser只接受.txt文件?

39

我想在我的表格中保存联系人,但是文件选择器总是将其设置为所有文件。 有没有办法将其设置为仅接受 .txt 并使其成为默认选项或唯一选项。

savecontact.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        JFileChooser filesave = new JFileChooser();
        int returnVal = filesave.showSaveDialog(Main.this);
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            try {
                File file = filesave.getSelectedFile();

                PrintWriter os = new PrintWriter(file);
                os.println("");
                for (int col = 0; col < table.getColumnCount(); col++) {
                    os.print(table.getColumnName(col) + "\t");
                }
                os.println("");
                os.println("");

                for (int row = 0; row < table.getRowCount(); row++) {
                    for (int col = 0; col < table.getColumnCount(); col++) {
                        os.print(table.getColumnName(col));
                        os.print(": ");
                        os.println(table.getValueAt(row, col));
                    }
                    os.println("");
                }
                os.close();
                System.out.println("Done!");
            } catch (IOException e1) {
                e1.printStackTrace();
            }
        }
    }
});
3个回答

92

你需要添加一个过滤器:

JFileChooser jf = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter("TEXT FILES", "txt", "text");
jf.setFileFilter(filter);

代码可以运行,但我仍然需要在文件末尾输入“.txt”扩展名。有没有一种方法可以默认保存为“.txt”? - Devendra Danny Ramdayal
1
调用 File file = filesave.getSelectedFile(); 后,您可以检查文件名是否具有扩展名 "txt"。如果没有,则创建一个新的包含扩展名的 File 对象,然后继续使用 new PrintWriter(file2);(创建新的 File 对象实际上并不会创建文件)。 - Enwired
从代码的外观来看 - 使用\t作为行中值的分隔符并使用换行符作为行之间的分隔符保存表格,它应该真正被称为.tsv(制表符分隔变量)! - Andrew Thompson
@AndrewThompson 我基本上同意,但是问题的提问者想知道如何强制使用文件扩展名.txt。我只是简单地说明了一种方法。他可能有某些原因喜欢.txt而不是.tsv,这与我无关。例如,Windows机器通常不识别扩展名.tsv,但它们确实识别.csv - Enwired
我在试着调整代码后终于搞明白了。感谢你的帮助。 - Devendra Danny Ramdayal

23

以下是一些例子

fileChooser.addChoosableFileFilter(new FileNameExtensionFilter("Images", "jpg", "png", "gif", "bmp"));
fileChooser.addChoosableFileFilter(new FileNameExtensionFilter("*.pdf", "pdf"));
fileChooser.addChoosableFileFilter(new FileNameExtensionFilter("*.txt", "txt"));

这会添加所有的扩展名而不会删除之前添加的过滤器吗? - gumuruh

4

您可以通过使用FileFilter实现该功能。

创建一个带有必要条件的Filefilter。将此文件过滤器设置为JFileChooser,然后启动它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接