[javaSE] IO流(递归查找指定文件)

本文介绍了一个使用递归方法查找指定目录下所有.java后缀的文件,并将这些文件路径持久化到文本文件的过程。通过定义静态方法fileToLine(),实现了目录遍历与文件筛选,随后使用writeToFile()函数将筛选结果写入指定文件,包含行号的输出,展示高效的数据处理能力。

递归方法,实现查找目录中以.java为后缀的文件路径,并存入文本文件中

 

定义一个静态方法fileToLine(),传入参数:File对象目录,List集合对象(List<File> 这样做的目的是因为这个方法会被递归,因此不能在内部创建,并且List集合是引用传递)

 

调用File对象的listFiles()方法,获取目录数组File[] files

循环这个数组for(File file : files),循环中

判断是否是目录file.isDirectory为真,进行递归fileToLine(file,list)

不是目录,判断后缀为”.java”文件,加入List集合

 

数据的持久化

定义一个函数writeToFile(),传递参数:List<File> 集合,String的文件名

定义一个BufferedWriter对象,new出来,构造参数:FileWriter对象,

for循环List<File>集合,循环中

调用File对象的getAbsolutePath()方法,得到String的文件绝对路径

调用BufferedWriter对象的write()方法,写入缓存,参数:String路径

调用BufferedWriter对象的newLine()方法,写入一个换行

调用BufferedWriter对象的flush()方法,刷新缓存

 

注意异常的捕获,关闭缓存

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.List;

public class IOTest {

    /**
     * @param args
     * @throws Exception 
     */
    public static void main(String[] args) throws Exception {
        File dir = new File("E:/");
        List<File> result = new ArrayList<File>();
        fileToLine(dir, result);
        //System.out.println(result);
        writeToFile(result,"E:/log.txt");
    }

    /**
     * 递归查找文件
     * 
     * @param dir
     * @param result
     */
    public static void fileToLine(File dir, List<File> result) {
        File[] files = dir.listFiles();
        if (files != null) {
            for (File file : files) {
                if (file.isDirectory()) {
                    // 递归目录
                    fileToLine(file, result);
                } else {
                    // 判断后缀,这里可以加入其他判断
                    if (file.getName().endsWith(".java")) {
                        result.add(file);
                    }
                }
            }
        }
    }
    /**
     * 持久化数据
     * @param files
     * @param logName
     * @throws Exception 
     */
    public static void writeToFile(List<File> files,String logName) throws Exception{
        BufferedWriter bw=new BufferedWriter(new FileWriter(logName));
        for(File file:files){
            String filePath=file.getAbsolutePath();
            bw.write(filePath);
            bw.newLine();
            bw.flush();
        }
        bw.close();
    }
}

加入行号,2万6000行数据,几秒的时间就能找到

 

转载于:https://www.cnblogs.com/taoshihan/p/5551410.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值