黑马程序员技术交流社区

标题: .doc文档用字符流读取出现乱码 [打印本页]

作者: 王红潮    时间: 2012-9-14 16:30
标题: .doc文档用字符流读取出现乱码
个人觉得word文档应该是字符文本,但用字符流读取写入均出现乱码
  1. public static void method1() throws FileNotFoundException, IOException {
  2. FileReader fr = new FileReader("f:\\io\\java.doc");
  3. FileWriter fw = new FileWriter("f:\\io\\javacopy.doc");

  4. BufferedReader bufr = new BufferedReader(fr);
  5. BufferedWriter bufw = new BufferedWriter(fw);
  6. String line = null;
  7. while((line = bufr.readLine())!=null){
  8. bufw.write(line);
  9. bufw.newLine();
  10. bufw.flush();
  11. }

  12. fw.close();
  13. fr.close();
  14. }
复制代码
拷贝出现乱码,而且比源文件小
  1. public static void method2() throws IOException {
  2. BufferedReader bufr = new BufferedReader(new InputStreamReader(new FileInputStream("f:\\io\\java.doc")));
  3. //BufferedWriter bufw = new BufferedWriter(new FileWriter("f:\\io\\javacopy.doc")); //与下面一样乱码
  4. BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("f:\\io\\javacopy.doc")));

  5. String line = null;
  6. while((line = bufr.readLine())!=null){
  7. bufw.write(line);
  8. bufw.newLine();
  9. bufw.flush();
  10. }

  11. bufw.close();
  12. bufr.close();

  13. }
复制代码
依然是乱码,并且比源文件小
  1. public static void method3() throws IOException {

  2. BufferedInputStream bufis = new BufferedInputStream(new FileInputStream("f:\\io\\java.doc"));
  3. BufferedOutputStream bufos = new BufferedOutputStream(new FileOutputStream("f:\\io\\javacopy.doc"));

  4. int ch = 0;
  5. while((ch=bufis.read())!=-1){
  6. bufos.write(ch);
  7. }

  8. bufos.close();
  9. bufis.close();


  10. }
复制代码
用字节流拷贝正常
world文档里面都是字符文本吗,为什么用字符流读取写入会出现问题,用转换流也出现问题,只能用字节流,还是world文档有特殊的编码,需要转码?




作者: 马睿    时间: 2012-9-14 16:35
……你读的是doc文件
JAVA提供的读取是读取txt系统文本文件,DOC属于微软MS WORD的关联格式。。。读出来当然是乱码了

读出来的是你把DOC文件直接用TXT强行打开的乱码……

换成TXT就正常了,如果一定要读取DOC必须用其他方法
作者: 小黑马    时间: 2012-9-14 16:36
word自定义格式比如项目符号啊,加入方框啊什么的,这种自定义后你用字符流读取就会乱码,




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