杯具呀..eclipse的默认编码是GBK,俺作为新鸟,直接用了GBK,于是乎被责成把所有class换成utf-8编码...
于是乎,自然而然想到了俺的FileOperator Class,它有两个读写文件的方法,一个读,一个写.当然还是很智能滴可以指定编码滴...恩,好说,可以把项目底下所有的java class以gbk编码读出来,then用utf-8血淋淋地写回去...sai...
First,我先写遍历项目文件夹的方法吧...于是乎,它诞生鸟——
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class Change {
public static void main(String[] args) {
getAllFiles(new File("D:\\EclipseProjects\\aaaaaaaaaaaa"));
}
// 遍历一个文件夹中的所有文件
public static void getAllFiles(File folder) {
if (!folder.isDirectory())
return;
List<File> files = new ArrayList<File>();
getFile(files, folder);
for (File f : files) {
String context = FileOperater.readText(f, "gbk");
FileOperater.writeText(f, context, "utf-8");
}
}
private static void getFile(List<File> list, File folder) {
File[] files = folder.listFiles();
for (File f : files) {
if (f.isDirectory()) {
getFile(list, f);// 若目录,则迭代
} else {
if (f.getName().endsWith(".java")) {
list.add(f);
}
}
}
}
}
我已经想写这个东西很久鸟...可以加到FileOperator里去鸟..But you see 那个 endsWith(".java")多么幼稚呀...怎么都该写个正则表达式是吧,But 以我之智商还是等看本正则式傻瓜书再说吧..
Okay,下一个,套用file operator吧——
public static String readText(File file, String encoding) {
String content = "";
try {
InputStreamReader pr = new InputStreamReader(new FileInputStream(
file), encoding);
BufferedReader reader = new BufferedReader(pr);
String temp = null;
while ((temp = reader.readLine()) != null) {
content += temp;
}
reader.close();// 关闭
} catch (Exception ex) {
Logger.getLogger(FileOperater.class.getName()).log(Level.SEVERE,
null, ex);
}
return content;
}
恩,这只是个读取文件内容的方法,encoding当然采用gbk,说实话,我得到内容...哇塞,它居然忽略了所有的换行...sai...真是一坨啊...
Then, 只更新这一句吧, content += (temp + "\n");
好了,okay,但是,"\n"这个东西真恐怕被ubuntu用户骂呀...
于是乎,另一个readText方法诞生鸟——
public static String readText(File file, String encoding) {
String content = "";
try {
InputStreamReader ir = new InputStreamReader(new FileInputStream(
file), encoding);
int i = -1;
while ((i = ir.read()) != -1) {
content += (char) i;
}
ir.close();
} catch (Exception ex) {
Logger.getLogger(FileOperater.class.getName()).log(Level.SEVERE,
null, ex);
}
return content;
}
多NB呀...尤其是这样的写法
int i = -1;
while ((i = ir.read()) != -1) {
content += (char) i;
}
你可知,俺之前是这么写的——
while(ir.read() != -1){
content += (char)ir.read();
}
可是,读取内容为"0123456789"时,却得到"13579"...这不是隔一个取一个么,"真智能"....
可见,NB写法好处多呀...千万表有要求写法简单明了的fandong(居然敏感词)组织鸟...
okay,这能满足你了吗,linuxer?...
Last,write吧——
public static void writeText(File file, String text, String encoding) {
try {
// BufferedWriter writer = new BufferedWriter(new
// java.io.OutputStreamWriter(new FileOutputStream(file)));
// writer.write(text);//内容在这里
// writer.close();//关闭
OutputStreamWriter pw = new OutputStreamWriter(
new FileOutputStream(file), encoding);
pw.append(text);
pw.close();
} catch (Exception ex) {
Logger.getLogger(FileOperater.class.getName()).log(Level.SEVERE,
null, ex);
}
}
可表用注释里那个木encoding的方法呦...
That's all, thank you .....