以前公司做項目一般用GBK編碼格式,后來考慮國際化想采用UTF-8編碼,要重用以前的代碼,JAVA代碼和JSP有中文字符,用UtralEdit或EditPlus是可以一個個[另存為]來轉(zhuǎn),那是笨笨的辦法。俺從不十這笨事,幫寫了個編碼工具類,寫完兩個以指定編碼讀寫文件的方法后,看一看Common FileUtils已有兩個類似的方法,當場暈。又重復(fù)發(fā)明輪子了。
不說了,還要干活,貼上代碼以備忘。
package hy;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;


public class FileUtils extends org.apache.commons.io.FileUtils
{
private static final String ENCODE_GBK = "GBK";
private static final String ENCODE_UTF8 = "UTF-8";

public static void convertGBK2UTF8(File file)
{
convertFileEncode(file, ENCODE_GBK, ENCODE_UTF8);
}


public static void convertUTF82GBK(File file)
{
convertFileEncode(file, ENCODE_UTF8, ENCODE_GBK);
}

public static void convertFileEncode(File file, String fromEncode, String toEncode)
{

try
{
String str = readFileToString(file, fromEncode);
writeStringToFile(file, str, toEncode);

} catch (IOException e)
{
System.out.println("Convert failed. File not exsit?");
e.printStackTrace();
}
}

public static String readFile(String filePath, String encode)
{
String fileContent = "";

try
{
FileInputStream fis = new FileInputStream(filePath);
InputStreamReader isr = new InputStreamReader(fis, encode);
BufferedReader br = new BufferedReader(isr);
StringBuffer sb = new StringBuffer();

for(String line = br.readLine(); line != null; line = br.readLine())
{
sb.append(line);
}
fileContent = sb.toString();
br.close();
isr.close();
fis.close();

} catch (FileNotFoundException e)
{
System.out.println("File not exist:"+filePath);

} catch (IOException e)
{
e.printStackTrace();
}
return fileContent;
}

public static String saveFile(String fileContent, String encode, String savePath)
{

try
{
FileOutputStream fos = new FileOutputStream(savePath);
OutputStreamWriter osw = new OutputStreamWriter(fos, encode);
BufferedWriter bw = new BufferedWriter(osw);
bw.write(fileContent);
bw.close();
osw.close();
fos.close();

} catch (FileNotFoundException e)
{
System.out.println("File not exist:"+savePath);

} catch (IOException e)
{
e.printStackTrace();
}
return fileContent;
}

public static synchronized void convertDirectory(File dir) throws IOException
{

if (!dir.exists() && !dir.isDirectory())
{
throw new IOException("[" + dir + "] not exsit or not a Directory");
}
convert(dir);
}


public static void convert(File dir)
{

if (dir.canRead() && dir.canWrite())
{

if (dir.isDirectory())
{//Directory
String[] files = dir.list();

if (files != null)
{

for (int i = 0; i < files.length; i++)
{
convert(new File(dir, files[i]));//遞歸
}
}

} else
{//File
convertGBK2UTF8(dir);
}
}
}



public static void main(String[] args) throws IOException
{
// File f = new File("c:/GenericAction.java");
// convertGBK2UTF8(f);
long t1 = System.currentTimeMillis();
File src = new File("C:\\myLucene");
convertDirectory(src);
long t2 = System.currentTimeMillis();
System.out.println("轉(zhuǎn)換完成,用時:"+(t2-t1)/1000);
}

}
