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();
            }
        }
    }

}

 

发布了186 篇原创文章 · 获赞 45 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/zhanshixiang/article/details/103894027
今日推荐