IO流——(12)练习——根据指定扩展名获取指定目录下的文件路径

一、需求:

获取指定目录下,指定扩展名的文件(包含子目录中的) 这些文件的绝对路径写入到一个文本文件中。

简单说,就是建立一个指定扩展名的文件的列表。

 

二、思路

1、需要进行深度遍历

2、在深度遍历的过程中按条件进行过滤。将符合过滤条件的目录名存入容器中

3、遍历容器,将容器中的绝对路径写入文本文件中

三、技术

1、需要使用io File创建文件对象,指定文件路径,为了提高效率,可使用缓冲区BufferedWriter

2、file对象获取所有文件 file.listFiles。

3、file对象判断是否为目录 file.isDirectory();

4、递归算法

5、FilenameFilter 文件过滤器接口

6、file对象获取绝对路径名 file.getAbsolutePath()

7、缓冲区对象 写入writer()、换行newLine()、刷新flush( )、关闭流close()

 

四、代码实现


/**
 * @author James
 * @create 2020-01-08 16:01
 * 获取指定目录下,指定扩展名的文件(包含子目录中的) 这些文件的绝对路径写入到一个文本文件中。
 *
 *  简单说,就是建立一个指定扩展名的文件的列表。
 *
 *  思路:
 * 1,必须进行深度遍历。
 * 2,要在遍历的过程中进行过滤。将符合条件的内容都存储到容器中。
 * 3,对容器中的内容进行遍历并将绝对路径写入到文件中。
 */
public class IoTest {

    public static void main(String[] args) throws IOException {

     File file =new File("D:\\idea_workspace");
     SuffixFilter suffixFilter =new SuffixFilter(".java");
     List<File> list =new ArrayList<>();
     getFilePathByFileName(file,suffixFilter,list);
     File desFile =new File(file,"javaList.txt");
     writerByFile(desFile,list);
    }

    /**
     * 将指定文件目录中,指定的扩展文件名路径遍历存入list集合中
     *
     * @param dir 文件所在目录
     * @param filter 文件过滤器
     * @param list 存放满足过滤条件后得到的路径集合
     */
    public static  void getFilePathByFileName(File dir, SuffixFilter filter, List<File> list){
        //获取路径中所有的文件
        File[] files = dir.listFiles();
        for (File file:files){
            //判断是否为目录,是目录则继续递归遍历
            if (file.isDirectory()){
                //递归
                getFilePathByFileName(file,filter,list);
            }else {
                //对文件进行条件过滤,满足条件的存入list
                if (filter.accept(file,file.getName())){
                    list.add(file);
                }
            }
        }
    }


    /**
     * 将集合中的目录写入指定目录下的文件
     * @param dir 目录位置
     * @param list 存有遍历后的路径集合
     */
    public static void writerByFile(File dir,List<File> list) throws IOException {
        BufferedWriter bufw =null;
        try {
            //创建缓冲区。提高效率
            bufw = new BufferedWriter(new FileWriter(dir));
            //遍历集合
            for (File file:list){
                //获取文件名写入
                bufw.write(file.getAbsolutePath());
                bufw.newLine();
                bufw.flush();
            }
        }catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (bufw!=null){
                bufw.close();
            }
        }
    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

真香号

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值