当你专为某种文件类型设计一套软件时,为了用户打开文件存盘方便,我们通常会在文件对话框中过滤掉无关的文件类型,让用户 很快速选择出想要的文件数据.例如在Word软件中,当我们按下"另存新文件"选项时,所出现的文件对话框将会以".doc"扩展名当作默 认的文件存储类型.
如果你所设计的软件可以支持多种类型的文件操作,你应该设计让用户可以选择使用哪一种类型的文件.
若你想在java的文件对话框中做到这样的功能,你必须实现FileFilter这个抽象类.此抽象类里面定义了两个空的方法,分别是 accept(File f)与getDescripton().当目录里的文件与设置的文件类型相符时,accept()方法就会返回true,并将此文件显示在文件 对话框中.而getDescription()方法则是对此文件类型的描述,可由程序设计者自定义,如"*.java"等等.要设置选择文件类型对话框 你可以使用JFileChooser的addChoosableFileFilter()方法或是setFileFilter()方法.下面这个例子我们实现FileFilter的功能,让 用户打开文件时可以选择显示所有文件,或是*.java文件,亦或是*.class文件.
import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.io.File;//由于我们在程序中要使用到File与FileFilter对象,因此要import File与FileFilter这两个类. import javax.swing.filechooser.FileFilter; public class FileFilterDemo implements ActionListener { JFrame f = null; JLabel label = null; JFileChooser fileChooser = null; public FileFilterDemo() { f = new JFrame("FileFilterDemo"); Container contentPane = f.getContentPane(); JButton b = new JButton("打开文件"); b.addActionListener(this); label = new JLabel(" ", JLabel.CENTER); label.setPreferredSize(new Dimension(150, 30)); contentPane.add(label, BorderLayout.CENTER); contentPane.add(b, BorderLayout.SOUTH); f.pack(); f.setVisible(true); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } public static void main(String[] args) { new FileFilterDemo(); } // 处理用户按下"打开旧文件"按钮事件. public void actionPerformed(ActionEvent e) { fileChooser = new JFileChooser("C:\\winnt");// 以c:\\winnt为打开文件为对话框的默认路径 // 利用addChoosableFileFilter()方法加入欲过滤的文件类型,使用addChoosableFileFilter()可以加入多种文件类型, // 若你只需要过滤出一种文件类型,可使用setFileFilter()方法. fileChooser.addChoosableFileFilter(new JAVAFileFilter("class")); fileChooser.addChoosableFileFilter(new JAVAFileFilter("java")); int result = fileChooser.showOpenDialog(f); if (result == JFileChooser.APPROVE_OPTION) { File file = fileChooser.getSelectedFile(); label.setText("你选择了:" + file.getName() + "文件"); } else if (result == fileChooser.CANCEL_OPTION) { label.setText("你没有选取文件"); } } } // 以JAVAFileFilter类继承FileFilter抽象类,并实现accept()与getDescription()方法. class JAVAFileFilter extends FileFilter { String ext; public JAVAFileFilter(String ext) { this.ext = ext; } /* 在accept()方法中,当程序所抓到的是一个目录而不是文件时,我们返回true值,表示将此目录显示出来. */ public boolean accept(File file) { if (file.isDirectory()) { return true; } String fileName = file.getName(); int index = fileName.lastIndexOf('.'); if (index > 0 && index < fileName.length() - 1) { // 表示文件名称不为".xxx"现"xxx."之类型 String extension = fileName.substring(index + 1).toLowerCase(); // 若所抓到的文件扩展名等于我们所设置要显示的扩展名(即变量ext值),则返回true,表示将此文件显示出来,否则返回 // true. if (extension.equals(ext)) return true; } return false; } // 实现getDescription()方法,返回描述文件的说明字符串!!! public String getDescription() { if (ext.equals("java")) return "JAVA Source File(*.java)"; if (ext.equals("class")) return "JAVA Class File(*.class)"; return ""; } }