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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,可以使用InputStreamReader和OutputStreamWriter将UTF-8编码文件转换为ANSI编码文件。以下是一个示例代码: ```java import java.io.*; public class UTF8ToANSIConverter { public static void main(String[] args) throws IOException { // 读取UTF-8编码文件 FileInputStream inputStream = new FileInputStream("input.txt"); InputStreamReader reader = new InputStreamReader(inputStream, "UTF-8"); // 写入ANSI编码文件 FileOutputStream outputStream = new FileOutputStream("output.txt"); OutputStreamWriter writer = new OutputStreamWriter(outputStream, "ANSI"); // 逐行读取写入文件 BufferedReader bufferedReader = new BufferedReader(reader); BufferedWriter bufferedWriter = new BufferedWriter(writer); String line; while ((line = bufferedReader.readLine()) != null) { bufferedWriter.write(line); bufferedWriter.newLine(); } // 关闭流 bufferedReader.close(); bufferedWriter.close(); } } ``` 在上面的示例代码中,首先使用FileInputStream和InputStreamReader读取UTF-8编码文件,然后使用FileOutputStream和OutputStreamWriter写入ANSI编码文件。由于UTF-8和ANSI编码的字符集不同,因此在创建InputStreamReader和OutputStreamWriter时需要指定相应的字符集。最后使用BufferedReader和BufferedWriter逐行读取写入文件,并在写入每行时加上换行符。读写完成后,关闭流即可。 需要注意的是,将UTF-8编码文件转换为ANSI编码时可能会出现乱码或字符集不兼容的情况,因此建议在转换前备份原文件,以防数据丢失。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值