A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王红潮 中级黑马   /  2012-9-14 16:30  /  3146 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

个人觉得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文档有特殊的编码,需要转码?



2 个回复

倒序浏览
……你读的是doc文件
JAVA提供的读取是读取txt系统文本文件,DOC属于微软MS WORD的关联格式。。。读出来当然是乱码了

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

换成TXT就正常了,如果一定要读取DOC必须用其他方法
回复 使用道具 举报
word自定义格式比如项目符号啊,加入方框啊什么的,这种自定义后你用字符流读取就会乱码,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马