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

来源:互联网 发布:ping服务器的某个端口 编辑:程序博客网 时间:2024/05/17 00:15
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文件使用如下方式来代替。