[javaSE] IO流(递归查找指定文件)
递归方法,实现查找目录中以.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; java.io.File; java.io.FileWriter; java.util.ArrayList; java.util.List; public class IOTest { /** * @param args * @throws Exception */ 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"); } * 递归查找文件 * * dir * result 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); } } } } } * 持久化数据 * files * logName * void writeToFile(List<File> files,String logName) Exception{ BufferedWriter bw=new BufferedWriter(new FileWriter(logName)); (File file:files){ String filePath=file.getAbsolutePath(); bw.write(filePath); bw.newLine(); bw.flush(); } bw.close(); } } 加入行号,2万6000行数据,几秒的时间就能找到 ? (编辑:北几岛) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |