java 文件过滤器

文件过滤器

1./*
  文件过滤器是个接口,需要写一个实现类才能创建对象.
  实现接口后就要重写里面accept方法,accept的返回值是布尔类型的.return false是在遍历的过程中过滤   掉,return true则刚好相反.
*/
例子:
class MyFilterTXT implements FileFilter {
    @Override
    public boolean accept(File pathname) {
        // TODO Auto-generated method stub
        return false;
    }
}

//过滤后缀名为txt的方法.
// 过滤.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());
        }
    }
}
我们常用的文件过滤器是FileFilter, 还有一个是FilenameFilter.它跟FileFilter差不多

//例子
// 通过FilenameFilter过滤器获取指定目录中小于200K的小文件
class MyFilterLengthFilter 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;
    }
}
FilenameFilter的两个参数:dir和name
第一个参数是文件夹的根路径,参数二是参数一路经下的文件和文件夹的名字(第一层级下).如果
要多层级需要自己写递归方法遍历.File中有个构造方法是File file = new File(dir
,name);用这两个参数可以创建一个对象出来.

字节流-输入输出

这里写图片描述

字节输出流

2.
     /*
         * 构造方法:
         * 参数  1.文件(被写入的文件)
         *       2.文件路径(被写入的路径)
         * 写入文件的流程:
         * 1.绑定要写入的文件 或 文件路径
         * 2.使用write方法写入 
         * 3.关闭资源
         */
        //绑定数据的目的地(绑定要写入的文件)
        //该路径下 没有该文件 会帮你创建出这个文件
        //如果已经有了该文件 文件会被覆盖
        File file = new File("/Users/lanou/Desktop/Test/wang.txt");
        FileOutputStream oStream = new FileOutputStream(file);
        //写入数据
        //按Ascii表的值输入的
        oStream.write(49);
        oStream.write(48);
        oStream.write(48);

        //用字节数组写入
        byte[] b = {65,66,67,68};
        oStream.write(b);
        //按字节数组的索引和长度写入
        oStream.write(b, 1, 2);
        //简单写法
        oStream.write("hello".getBytes());
        oStream.write("world".getBytes());
        //关闭资源
        oStream.close();
    }
      /*
         * 文件的续写和换行  
         */
        File file = new File("/Users/lanou/Desktop/Test/long.txt");
        FileOutputStream oStream = new FileOutputStream(file, true);
        oStream.write("hello\n".getBytes());
        oStream.close();

字节输入流

    //创建输入流
       File file = new File("/Users/lanou/Desktop/Test/znb.txt");
        FileInputStream iStream = new FileInputStream(file);
        //读取
        int i1 = iStream.read();
        System.out.println((char)i1);
        i1 = iStream.read();
        System.out.println((char)i1);
        i1 = iStream.read();
        System.out.println((char)i1);
        i1 = iStream.read();
        System.out.println((char)i1);
        i1 = iStream.read();
        System.out.println((char)i1);
        // 当读取到文件末尾的时候会返回-1
        // 相当于 你读到-1 文件都读完了
        i1 = iStream.read();
        System.out.println(i1);

        //关闭资源
        iStream.close();
    }

    //循环读取
        File file = new File("/Users/lanou/Desktop/Test/znb.txt");
        FileInputStream iStream = new FileInputStream(file);
        //read方法 每调用一次 就读取一个字节
        // 循环的时候 只能出现一次
        int num = 0;
        while ((num = iStream.read()) != -1) {
            System.out.println(num);
        }
        iStream.close();

//使用字节数组 读取文件
        File file = new File("/Users/lanou/Desktop/Test/znb.txt");
        FileInputStream iStream = new FileInputStream(file);
        //声明了一个长度为2的 空的 字节数组
        // 读取时会把 读出来的内容 放进字节数组中存储
        byte[] b = new byte[2];
        int i1 = iStream.read(b);
        System.out.println(i1);// 2   2   1   -1(复制这个读取过程  连续4次 运行后出现的结果)
        //利用字符串的构造方法直接打印字符串
        System.out.println(new String(b));// ab  cd  ed  ed
        iStream.close();
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值