A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

查了API,有两个文件过滤器,File[] listFiles(FileFilter filter)和File[] listFiles(FilenameFilter filter),这两有什么区别吗?请举个例子详细说一下好吗?

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

4 个回复

正序浏览
如果问题未解决,请继续追问,如果问题解决了,请将问题分类改为“已解决”,谢谢
回复 使用道具 举报
java.io 接口 FileFilter
文件过滤器类
  1. package com;
  2. import java.io.File;
  3. import javax.swing.filechooser.FileFilter;
  4. //继承FileFilter
  5. public class MyFileFilter extends FileFilter{
  6.         //路径,文件,是否在文件选择器中显示
  7.         public boolean accept(File f) {
  8.                 //传进来的文件名,全部变为小写字母,方便对比
  9.                 String filename=f.getName().toLowerCase();
  10.                 if(f.isDirectory()){//判断是否是文件夹
  11.                         return true;
  12.                 }
  13.                 if(filename.endsWith(".txt")){
  14.                         return true;
  15.                 }
  16.                 return false;
  17.         }
  18.         //文件类型的描述
  19.         public String getDescription() {
  20.                 return "文本文件(*.txt)";
  21.         }
  22. }
  23. 窗体
  24.         //文件选择框
  25.         private void filechoose(){
  26.                 //添加文件过滤器
  27.                 this.fc.addChoosableFileFilter(new MyFileFilter());
  28.                 int result=this.fc.showOpenDialog(null);
  29.                 if(result==JFileChooser.APPROVE_OPTION){
  30.                         File file=this.fc.getSelectedFile();//返回文件选择框选择的文件对象
  31.                         System.out.println("文件名:"+file.getName());
  32.                         System.out.println("文件路径:"+file.getPath());
  33.                 }
  34.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
1,File[] listFiles(FileFilter filter),
2,File[] listFiles(FilenameFilter filter)
如果你仅仅想根据文件名进行过滤,则用第二种就足够了,
可是你还想根据其他的文件属性进行过滤,比如文件大小,文件的创建时间,等等,则用第一种
第一种要比第二种强大。
我只写了测试第一种代码,不是很严谨,只是为了说明问题,
功能是:过滤文件我的F盘下文件大小大于100M的文件。
  1. public class TestFilter {

  2.         public static void main(String[] args) {

  3.                 File f=new File("F:/");
  4.                 File[] files=f.listFiles(new FileFilter()
  5.                 {
  6.                         @Override
  7.                         public boolean accept(File pathname) {
  8.                                 if(pathname.length()>1024*1024*100)//文件大小大于100M的过滤出来
  9.                                                                 {
  10.                                                                         return true;
  11.                                                                 }
  12.                                 return false;
  13.                         }
  14.                         
  15.                 }) ;                                                      
  16.                 for(File file :files)
  17.                 {
  18.                         System.out.println(file);
  19.                 }
  20.         }
  21. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 乘鱼飞 于 2013-4-21 19:57 编辑

这两个文件过滤器非常相似,都是接口,就是里面的参数不同,
FilenameFilter是文件名过滤器,FileFilter是文件过滤器。
个人感觉FilenameFilter文件名过滤器,查找文件更精确
代码举例:
(1)//测试File[] listFiles(FileFilter filter)
import java.io.*;
public class TestFilter {

        public static void main(String[] args) {

                File f=new File("E:/");
                File[] files=f.listFiles(new FileFilter()
                {
                        @Override
                        public boolean accept(File pathname) {
                                try {
                                        if(pathname.getCanonicalPath().endsWith(".txt"))
                                        {
                                                return true;
                                        }
                                } catch (IOException e) {
                                        e.printStackTrace();
                                }
                                return false;
                        }
                        
                }) ;                                                      //匿名内部类
                for(File file :files)
                {
                        System.out.println(file);
                }
        }
}
/*输出结果:
E:\cccutil.txt
E:\codepage.txt
E:\license-kr.txt
E:\license.txt
E:\readme.txt
*/
(2)//测试File[] listFiles(FilenameFilter filter)
public class TestFilter {

        public static void main(String[] args) {

                File f=new File("E:/");
                File[] files=f.listFiles(new FileFilter()
                {
                        @Override
                        public boolean accept(File pathname) {
                                try {
                                        if(pathname.getCanonicalPath().endsWith("xml.stx"))
                                        {
                                                return true;
                                        }
                                } catch (IOException e) {
                                        e.printStackTrace();
                                }
                                return false;
                        }
                        
                });
                for(File file :files)
                {
                        System.out.println(file);
                }
        }
}
/*输出结果:
E:\xml.stx

*/

点评

建议你将代码插入代码框中,这样复制和查看都比较方便,谢谢  发表于 2013-4-21 22:14

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马