遞歸方法,實現查找目錄中以.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行數據,幾秒的時間就能找到