更改 .java 文件的编码格式

杯具呀..eclipse的默认编码是GBK,俺作为新鸟,直接用了GBK,于是乎被责成把所有class换成utf-8编码... :cry:
于是乎,自然而然想到了俺的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 .....
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值