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文件使用如下方式来代替。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值