[javaSE] IO流(遞迴尋找指定檔案),javaseio
遞迴方法,實現尋找目錄中以.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行資料,幾秒的時間就能找到