應用場景:比方有一個深層次的文件目錄結構,如: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();
}
}
}
作者:itmyhome
