递归获取指定后缀文件写入文件

本文介绍如何使用Java递归获取'I:Test'目录下所有'.bmp'文件的路径,并将这些路径写入'Test遍历指定后缀文件的路径.txt'文件。通过ArrayList存储路径,利用FileFilter进行后缀筛选。
摘要由CSDN通过智能技术生成
package demo.io;

import java.io.*;
import java.util.ArrayList;

class 递归获取指定后缀文件写入文件 {
    public static void main(String[] args) {
        File dir = new File("I:\\Test");
        //定义集合存放指定后缀文件的路径
        ArrayList<String> fileNames = new ArrayList<>();
        //递归将文件路径存入集合
        listAll(dir, fileNames);

        //遍历集合
        for (String fileName : fileNames) {
            System.out.println(fileName);
        }
        //写入文件
        File file = new File("I:\\Test\\遍历指定后缀文件的路径.txt");
        inputFile(file, fileNames);
    }

    //写入文件
    private static void inputFile(File file, ArrayList<String> fileNames) {
        BufferedWriter bufw = null;
        try {
            bufw = new BufferedWriter(new FileWriter(file));
            for (String fileName : fileNames) {
                bufw.write(fileName, 0, fileName.length());
                bufw.newLine();
                bufw.flush();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (bufw != null) {
                    bufw.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    //使用集合存放指定后缀文件的路径
    private static void listAll(File dir, ArrayList<String> fileNames) {
        File[] files = dir.listFiles(new FilterBySuffix3(".bmp"));
        for (File file : files) {
            //如果是目录就继续遍历
            if (file.isDirectory()) {
                listAll(file, fileNames);
            } else {
                //如果是文件就存入集合
                fileNames.add(file.getAbsolutePath());
            }
        }
    }
}

//递归过滤得到指定后缀文件
class FilterBySuffix3 implements FileFilter {
    private String suffix;

    FilterBySuffix3(String suffix) {
        this.suffix = suffix;
    }

    @Override
    public boolean accept(File pathname) {
        if (pathname.isDirectory())//如果是目录就继续遍历
            return true;
        //如果该文件是指定后缀,返回true,否则返回false
        return pathname.getName().endsWith(suffix);
    }
}
/**
 * 也可以用过滤器对象对每一个文件筛选
 * <p>
 * * 对指定目录中的内容进行深度遍历,并按照指定过滤器,进行过滤,
 * * 将过滤后的内容存储到指定容器List中。
 * * @param dir
 * * @param filter
 * * @param list
 * public static void getFiles(File dir,FilenameFilter filter,List<File> list){
 * <p>
 * File[] fls = dir.listFiles();
 * for(File file :fles){
 * if(file.isDirectory()){
 * //递归啦!
 * getFiles(file,filter,list);
 * }else{
 * //对遍历到的文件进行过滤器的过滤。将符合条件File对象,存储到List集合中。
 * if(filter.accept(dir, file.getName())){
 * list.add(file);
 * }
 * }
 * }
 * }
 * <p>
 * <p>
 * 对应的简单过滤器
 * FilenameFilter filter = new FilenameFilter(){
 *
 * @Override public boolean accept(File dir, String name) {
 * <p>
 * return name.endsWith(".java");
 * }
 * };
 */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值