黑马程序员技术交流社区

标题: 关于字符流的问题 [打印本页]

作者: jaijaiok    时间: 2013-12-9 01:30
标题: 关于字符流的问题
  1. public static void show1() throws Exception {
  2.                 FileReader fr = null;
  3.                 FileWriter fw = null;

  4.                 try {
  5.                         fr = new FileReader("f:\\2013\\demo.java");
  6.                         fw = new FileWriter("f:\\2013\\demo1.java");
  7.                         char[] bur = new char[1024];
  8.                         int len;
  9.                         while (-1 != (len = fr.read(bur))) {
  10.                                 fw.write(bur, 0, len);
  11.                         }
  12.                 } catch (RuntimeException e) {
  13.                         // TODO Auto-generated catch block
  14.                         e.printStackTrace();
  15.                 } finally {
  16.                         if (fr != null)
  17.                                 fr.close();
  18.                         if (fw != null)
  19.                                 fw.close();
  20.                 }

  21.         }
复制代码
为什么复制出的文件打开后汉字是乱码呢!难道用的码表不同?

作者: 做个有理想的人    时间: 2013-12-9 08:56
测试后,代码是正确的,复制后不存在乱码问题
作者: ┾——黑马    时间: 2013-12-9 09:20
char[] bur = new char[1024];
改成byte[] bur = new byte[1024];字节流是自定义byte缓冲区,而不是字节数组缓冲区
作者: 史超    时间: 2013-12-9 09:34
用字节流读包含中文的文件出现乱码是不可避免的,简单的想想:单第一个字为英文,第二个子为中文,而一个英文占1一个字节,一个中文占两个字节,当你用两个字节的的数组读取,中文字就会被拆分,这样就肯定会出现乱码。
作者: hel    时间: 2013-12-9 13:17
哪有可能你那 文件中 前两个字符是“联通”,或者是用utf—8可以解析的文字
作者: Crist    时间: 2013-12-9 16:12
出现乱码也就是   恰好你只读到了 半个中文  然后出现了一半  
这个字符流是没办法避免的  如果一定要是字符流  可以尝试换下 字符编码 换UTF-8
还有一种办法是用高效流  一行一行的读写
BufferedWriter bw =new BufferedWriter(new  FileWriter ("f:\\2013\\demo.java"));
BufferedReader br =new BufferedReader (new  FileWriter("f:\\2013\\demo1.java"));
String line =null;
while((line=bw.readLine())!=null){
  bw.newLine();
  bw.write(line);
  bw.fulsh();
}
bw.close();
br.close();
这样就好了!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2