1. 程式人生 > >Java遍歷資料夾下所有檔案並替換指定字串

Java遍歷資料夾下所有檔案並替換指定字串

應用場景:比如有一個深層次的檔案目錄結構,如: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();
        }
    }
}