Java中IO包下的File(基础解析二)

文件过滤器

    文件过滤器是个接口
    FileFilter 接口
    FilenameFilter 接口
    需要重写这个过滤器的方法

测试过滤器效果

FileFilter
public class Demo {
    public static void main(String[] args) {
       // 测试过滤器效果
       File file = new File("/Users/s/Desktop/Test");
       // 使用重载的 listFile方法
       File[] listFiles file.listFiles(new MyFileFilter());
       // 遍历文件夹
       for(File subFile : listFiles) {
            // 打印过滤后的 文件的 名字
           System.out.println(subFile.getName());
       }
    }
}   
    // 编写自定义的类 实现 过滤器接口
class MyFileFilter implements FileFilter{
    // 按什么规则 来 过滤 文件
    // 过滤文件时 就看这个方法的返回值
    // 返回false 就被过滤
    // 返回true 就保留
    @Override
    public boolean accept(File pathname){
        // 如果是文件夹 就过滤掉
        if (pathname.isDirectory()){
            return false;
        }
        // 不是文件夹 就保留
        return true;
    }
}
    过滤文件夹,保存文件夹中的.txt文件

public class Demo {
    public static void main(String[] args) {   
        File file = new File("/Users/s/Desktop/Test");
        getFile(file);
    }
    // 封装一个遍历方法
    public static void getFile(File file){
    // 将过滤器直接传进去
        File[] listFiles = file.listFiles(new MyFileterTXT());
        // 遍历
        for (File subFile : listFiles){
            // 判断 是不是文件夹
            if (subFile.isDirectory()){
                //是文件夹就继续遍历
                    getFile(subFile);
                }else {
                    //不是文件夹就打印文件名
                    System.out.println(subFile.getName());
                }
            }
        }

    }

class MyFilterTXT implements FileFilter{

    @Override
    public boolean accept(File pathname){
        // 相当于所有第一级的文件 
        // 都判断了一下 后缀是不是 txt
        // 文件夹也在当中 被判断 然后过滤掉了
        // 这样就会过滤掉文件夹中的txt文件
        // 所以需要 判断 是文件夹 直接返回true
        if(pathname.isDirectory()){
            return true;
        }
        // 由于endWith的返回值也是boolean类型
        // 也是判断后缀是不是txt
        // 是就返回true
        return pathname.getName().endsWith("txt");
    }
}
FilenameFilter
    public class Demo {
    public static void main(String[] args) {   
        File file = new File("/Users/s/Desktop/Test");
        getFile(file);
    }
    // 封装一个遍历方法
    public static void getFile(File file){
    // 将过滤器直接传进去
        File[] listFiles = file.listFiles(new MyFileNameFilter());
        // 遍历
        for (File subFile : listFiles){
            // 判断 是不是文件夹
            if (subFile.isDirectory()){
                //是文件夹就继续遍历
                    getFile(subFile);
                }else {
                    //不是文件夹就打印文件名
                    System.out.println(subFile.getName());
                }
            }
        }

    }
    // 测试 FilenameFilter接口 (1.0版本)
class MyFileNameFilter implements FilenameFilter{

    @Override
    public boolean accept(File dir, String name) {
        /*
         * 参数1 : 传进来的文件夹 根路径
         * 参数2 : 该路径下的文件的名字和文件夹的名字
         */
        // 利用者两个参数 创建一个文件对象出来
        File file = new File(dir, name);
        //System.out.println(dir + "---" + name);
        System.out.println(file);
        return false;
    }

}
    //通过FilenameFilter过滤器获取指定目录中小于200K的小文件

    public class Demo {
    public static void main(String[] args) {   
        File file = new File("/Users/s/Desktop/Test");
        getFile(file);
    }
    // 封装一个遍历方法
    public static void getFile(File file){
    // 将过滤器直接传进去
        File[] listFiles = file.listFiles(new MyFileNameFilter());
        // 遍历
        for (File subFile : listFiles){
            // 判断 是不是文件夹
            if (subFile.isDirectory()){
                //是文件夹就继续遍历
                    getFile(subFile);
                }else {
                    //不是文件夹就打印文件名
                    System.out.println(subFile.getName());
                }
            }
        }

    }

    class getFileBySize implements FilenameFilter{

    @Override
    public boolean accept(File dir, String name) {
        File file = new File(dir, name);
        // 过滤隐藏文件
        if (file.isHidden()) {
            return false;
        }
        // 文件夹不过滤
        if (file.isDirectory()) {
            return true;
        }
        return file.length() < 200 * 1024;
    }

}

http://blog.csdn.net/ssssssue

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值