Bootstrap

java reader utf-8_java读取写入utf-8编码文件

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文件使用如下方式来代替。

;