JAVA使用递归方法遍历文件夹并获文件下的指定格式文件

本文介绍如何使用Java的File类和FileFilter接口遍历指定文件夹,筛选并保存PDF和MD文件。通过递归方式及文件输入输出流实现文件复制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JAVA遍历指定文件夹获取指定文件,File类调用方法

该代码是使用File类来关联指定文件和文件夹,输入参数为需要遍历的文件夹。采用递归的方式,来遍历整个文件夹来获取指定文件。比如获得.pdf文件等。
其次就是使用文件输入流和输出流来对文件进行保存。下面给出代码,注意抛异常。

     public static void getfiles(File file1) throws IOException {
    File[] files = file1.listFiles();
    for (File file : files) {
        if (file.isFile()) {//判断是否文文件
            if (file.getName().toLowerCase().endsWith(".pdf")) {//判断文件是否为pdf文件
                System.out.println(file.getName());
                FileInputStream fis = new FileInputStream(file);//关联读入文件
                File dir = new File("D:\\wenJian");//创建保存的路径文件夹,自己可以选择合适的位置
                if (!dir.exists()) {//文件夹不存在就自己创建
                    dir.mkdir();
                }
                FileOutputStream fos = new FileOutputStream(dir + "\\" + file.getName());//保存路径
                byte[] b = new byte[1024];
                int len;
                while ((len = fis.read(b)) != -1) {
                    fos.write(b, 0, len);
                }
                fis.close();
                fos.close();
            }
        } else {
            getfiles(file);//是文件夹就递归遍历
        }
    }
}

JAVA还提供了一个过滤文件类FileFilter类,下面介绍另一种方法

使用FileFilter类,可以在File类创建实例的时候,调用其构造函数。过滤出选择的指定文件。其实File.listFiles方法在调用时,他会调用FileFilter中的抽像方法accept(),可以自己创建类继承FileFilter类,实现accept()方法,定义自己的过滤标准。
在这里,我是用 Lambda表达式写出想要的目标文件。当然,你也可以自己确定需要的的文件。

  public static void getFiles(File file1) throws IOException {
        File[] files = file1.listFiles(pathname -> pathname.isDirectory() || pathname.getName().toLowerCase().endsWith(".pdf") ||
                pathname.getName().toLowerCase().endsWith(".md"));///获取.pdf文件和.md文件
        for (File file : files) {
            if (!file.isDirectory()) {//如果时文件,则保存
                FileInputStream fis = new FileInputStream(file);
                File dir = new File("J:\\heima");//创建保存的路径文件夹
                if (!dir.exists()) {//文件夹不存在就自己创建
                    dir.mkdir();
                }
                FileOutputStream fos = new FileOutputStream("J:\\heima\\" + file.getName());//保存路径
                byte[] b = new byte[1024];
                int len;
                while ((len = fis.read(b)) != -1) {
                    fos.write(b, 0, len);
                }
                fis.close();
                fos.close();
                System.out.println(file.getName());
            } else {
                getFiles(file);//递归遍历
            }
        }
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值