本篇隨筆主要介紹了一個用java語言寫的將一個文件編碼轉換為另一個編碼並不改變文件內容的工具類:
通過讀取源文件內容,用URLEncoding重新編碼解碼的方式實現。
public class ChangeFileEncoding {
public static int fileCount = 0;
public static String sourceFileRoot = "替換為要轉換的源文件或源目錄"; // 將要轉換文件所在的根目錄
public static String sourceCharset = "GB2312"; // 源文件編碼
public static String targetCharset = "utf8"; // 目標文件編碼
public static void main(String[] args) throws IOException {
File fileDir = new File(sourceFileRoot);
convert(fileDir);
System.out.println("Total Dealed : " + fileCount + "Files");
}
public static void convert(File file) throws IOException {
// 如果是文件則進行編碼轉換,寫入覆蓋原文件
if (file.isFile()) {
// 只處理.java結尾的代碼文件
if (file.getPath().indexOf(".java") == -1) {
return;
}
InputStreamReader isr = new InputStreamReader(new FileInputStream(
file), sourceCharset);
BufferedReader br = new BufferedReader(isr);
StringBuffer sb = new StringBuffer();
String line = null;
while ((line = br.readLine()) != null) {
// 注意寫入換行符
line = URLEncoder.encode(line, "utf8");
sb.append(line + "\r\n");//windows 平台下 換行符為 \r\n
}
br.close();
isr.close();
File targetFile = new File(file.getPath());
OutputStreamWriter osw = new OutputStreamWriter(
new FileOutputStream(targetFile), targetCharset);
BufferedWriter bw = new BufferedWriter(osw);
// 以字符串的形式一次性寫入
bw.write(URLDecoder.decode(sb.toString(), "utf8"));
bw.close();
osw.close();
System.out.println("Deal:" + file.getPath());
fileCount++;
} else {
//利用遞歸對目錄下的每個以.java結尾的文件進行編碼轉換
for (File subFile : file.listFiles()) {
convert(subFile);
}
}
}
}