private static void replace(File file,String searchStr,String replaceStr) {
// TODO Auto-generated method stub
if(searchStr == null){
return;
}
try{
/* FileReader reader = new FileReader(file);
char[] dates = new char[1024];
int count = 0;
StringBuilder sb = new StringBuilder();
while((count = reader.read(dates)) > 0){
String str = String.valueOf(dates, 0, count);
sb.append(str);
}
reader.close();*/
InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "UTF-8");
StringBuffer sbread = new StringBuffer();
while (isr.ready()) {
sbread.append((char) isr.read());
}
isr.close();
// 从构造器中生成字符串,并替换搜索文本
String str = sbread.toString().replace(searchStr, replaceStr);
/* FileWriter writer = new FileWriter(file);
writer.write(str.toCharArray());
writer.close();*/
OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(file),"UTF-8");
out.write(str.toCharArray());
out.flush();
out.close();
}catch(Exception e){
e.printStackTrace();
}
System.out.println("替换完成!");
}
因为FileWriter在写文件的时候,其编码方式似乎是System.encoding或者System.file.encoding(
已经证明FileWriter和FileReader确实使用系统当前默认的编码方式,更多信息包括FileReader的详见http://www.javapractices.com/Topic42.cjp
),
* 在中文win下encoding基本是gb2312,在en的win下基本是iso-8859-1,总之不是utf-8。
* 所以要创建一个utf-8的文件,用FileWriter是不行的。( FileWriter和FileReader都不支持通过参数指定编码方式,而OutputStreamWriter和InputStreamReader可以。这两个类从名字上就可以看到是字节流和字符流的组合,实际上也是连接两者的桥梁 )。 目前不知道如何更改其用来写文件的编码方式,因此对于创建utf-8文件使用如下方式来代替。