Java中File文件类之文件过滤器

文件过滤器

文件过滤器是个接口
过滤器一:File[] listFiles(FileFilter filter) 

    public static void fun1() {
        // 测试过滤器(FileFilter)
        File file = new File("/Users/lanou/Desktop/level");
        // 使用重载 的 listFiles 方法
        File[] listFiles = file.listFiles(new MyFilter());
        for (File file2 : listFiles) {
            System.out.println(file2.getName());
        }
    }

// 编写自定义的类 实现过滤器借口
class MyFilter implements FileFilter{
    // 按规则过滤文件,过滤文件时 返回false就被过滤 返回true保留
    @Override
    public boolean accept(File pathname) {
        if (pathname.isDirectory()) {
            return false;
        }
        return true;
    }   
}

// 过滤TXT文件
class MyFilterTXT implements FileFilter{

    @Override
    public boolean accept(File pathname) {
        // 这么写相当于 所有第一级的文件都判断了一下 后缀是不是txt
        // 文件夹也在当中被判断 然后被过滤掉了
        // 判断是文件夹直接返回true
        if (pathname.isDirectory()) {
            return true;
        }
        return pathname.getName().endsWith("txt");
    }   
}

    // 通过过滤器 遍历打印文件夹中的所有txt文件
    public static void getTXTFile(File file) {
        File[] listFiles = file.listFiles(new MyFilterTXT());
        for (File subFile : listFiles) {
            if (subFile.isDirectory()) {
                getTXTFile(subFile);
            } else {
                System.out.println(subFile.getName());
            }
        }
    }

    public static void main(String[] args) {
        File file = new File("/Users/lanou/Desktop/level");
        getTXTFile(file);
    }
过滤器二:File[] listFiles(FilenameFilter filter)

// 测试过滤器(FilenameFilter) 
class MyFileNameFilter implements FilenameFilter{

    @Override
    public boolean accept(File dir, String name) {
        /*
         * 参数1: 传进来的文件夹根路径
         * 参数2: 该路径下的文件的名字和文件夹的名字
         */
        // 利用这两个参数创建一个文件对象出来
        File file = new File(dir, name);
        System.out.println(file);
        return false;
    }
}
    // 遍历所有文件
    public static void getTXTFile(File file) {
        File[] listFiles = file.listFiles(new MyFileNameFilter());
        for (File subFile : listFiles) {
            if (subFile.isDirectory()) {
                getTXTFile(subFile);
            } else {
                System.out.println(subFile.getName());
            }
        }
    }

// 通过FilenameFilter过滤器获取指定目录中小于200K的小文件
class MyFileNameFilterLength 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;
    }   
}

    public static void getTXTFile(File file) {
        File[] listFiles = file.listFiles(new MyFileNameFilterLength());
        for (File subFile : listFiles) {
            if (subFile.isDirectory()) {
                getTXTFile(subFile);
            } else {
                System.out.println(subFile.getName());
            }
        }
    }

    public static void main(String[] args) {
        File file = new File("/Users/lanou/Desktop/level");
        getTXTFile(file);
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值