Java遍歷資料夾下所有檔案並替換指定字串
阿新 • • 發佈:2019-02-05
應用場景:比如有一個深層次的檔案目錄結構,如:javaAPI
每個檔案裡面都有相同的內容,而我們要統一修改為其他內容。上千個檔案如果一個個修改顯得太不明智。
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import java.io.PrintWriter; public class Test { /** * @author itmyhome */ public static void main(String[] args) { File f = new File("F:/javaAPI/java/lang/reflect"); print(f, 0); } /** * 遍歷資料夾 * * @param f * @param len */ public static void print(File f, int len) { File[] file = f.listFiles(); for (int i = 0; i < file.length; i++) { if (file[i].isDirectory()) { //判斷是否資料夾 print(file[i], len + 1); } // 為防止輸出檔案覆蓋原始檔,所以更改輸出盤路徑 也可自行設定其他路徑 File outPath = new File(file[i].getParent().replace("F:", "E:")); File readfile = new File(file[i].getAbsolutePath()); if (!readfile.isDirectory()) { String filename = readfile.getName(); // 讀到的檔名 String absolutepath = readfile.getAbsolutePath(); // 檔案的絕對路徑 readFile(absolutepath, filename, i, outPath); // 呼叫 readFile } } } /** * 讀取資料夾下的檔案 * * @return */ public static void readFile(String absolutepath, String filename, int index, File outPath) { try { BufferedReader bufReader = new BufferedReader(new InputStreamReader( new FileInputStream(absolutepath), "gb2312")); // 資料流讀取檔案 StringBuffer strBuffer = new StringBuffer(); String newStr = "i love you too"; String oldStr = "i love you"; for (String temp = null; (temp = bufReader.readLine()) != null; temp = null) { if ((temp.indexOf(oldStr) != -1) && (temp.indexOf(oldStr) != -1)) { // 判斷當前行是否存在想要替換掉的字元 temp = temp.replace(oldStr, newStr); // 此處進行替換 } strBuffer.append(temp); strBuffer.append(System.getProperty("line.separator")); // 換行符 } bufReader.close(); if (outPath.exists() == false) { // 檢查輸出資料夾是否存在,若不存在先建立 outPath.mkdirs(); System.out.println("已成功建立輸出資料夾:" + outPath); } PrintWriter printWriter = new PrintWriter(outPath + "\\" + filename, "gb2312"); // 替換後輸出檔案路徑 printWriter.write(strBuffer.toString().toCharArray()); //重新寫入 printWriter.flush(); printWriter.close(); System.out.println("第 " + (index + 1) + " 個檔案 " + absolutepath + " 已成功輸出到 " + outPath + "\\" + filename); } catch (Exception e) { e.printStackTrace(); } } }