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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© kaka小明 中级黑马   /  2013-5-27 18:31  /  2254 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 kaka小明 于 2013-5-28 08:08 编辑

先上代码:
package com.my.byteArray;

import java.io.ByteArrayInputStream;
import java.io.CharArrayReader;
import java.io.CharArrayWriter;
import java.io.FileWriter;
import java.io.IOException;

public class Main {

        public static void main(String[] args) {
                CharArrayReader car=new CharArrayReader("abcdef".toCharArray());
                CharArrayWriter caw=new CharArrayWriter();
                int c=0;
                try {
                        while((c=car.read())!=-1){
                                caw.write(c);
                        }
                        
                        System.out.println(caw.toString());//打印abcdef
                        caw.writeTo(new FileWriter("D:\\charArray.txt"));//问题:charArray.txt文件没有内容??
                        caw.flush();
                        System.out.println("写数组完成");
                } catch (IOException e) {
                        e.printStackTrace();
                }

        }

}
目标文件为空,字符数组输出流中有内容,为什么写不到目的文件中呢?求各位牛牛解答。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

10 个回复

倒序浏览
那是因为charArrayWriter类中的writeTo()方法是将缓冲区的内容写入另一个字符流,以你的代码,内容还在new出来的FileWriter字符流中,没有刷新它自然不会写入到目的文件。代码应该改成这样就好了:
  1. import java.io.ByteArrayInputStream;
  2. import java.io.CharArrayReader;
  3. import java.io.CharArrayWriter;
  4. import java.io.FileWriter;
  5. import java.io.IOException;

  6. public class Main {

  7.         public static void main(String[] args) {

  8.                 CharArrayReader car=new CharArrayReader("abcdef".toCharArray());
  9.                 CharArrayWriter caw=new CharArrayWriter();
  10.                 FileWriter fw = null;
  11.                 int c=0;
  12.                 try {
  13.                         while((c=car.read())!=-1){
  14.                                 caw.write(c);
  15.                         }
  16.                         
  17.                         fw = new FileWriter("D:\\charArray.txt");
  18.                         System.out.println(caw.toString());
  19.                         caw.writeTo(fw);
  20.                         fw.close();
  21.                         System.out.println("write char complete");
  22.                 } catch (IOException e) {
  23.                         e.printStackTrace();
  24.                 }

  25.         }

  26. }
复制代码
回复 使用道具 举报
      caw.writeTo(new FileWriter("D:\\charArray.txt"));    我看了下API文档,是写入流中的,所以我加了一句flush(); 文件中显示数据了。---其实具体原因我i也不太清楚,这个类之前没接触过,{:soso_e100:},只是觉得可能流中的内容没刷到文件中。      
     FileWriter fw = new FileWriter("charArray.txt");
                         caw.writeTo(fw);//问题:charArray.txt文件没有内容??
                                                fw.flush();//这个是我加的
                                                caw.flush();
                                                fw.close();
                        System.out.println("写数组完成");
回复 使用道具 举报
无妄无涯 发表于 2013-5-27 20:19
那是因为charArrayWriter类中的writeTo()方法是将缓冲区的内容写入另一个字符流,以你的代码,内容还在new ...

多谢啦 !呵呵!
回复 使用道具 举报
lpflpy 发表于 2013-5-27 20:39
caw.writeTo(new FileWriter("D:\\charArray.txt"));    我看了下API文档,是写入流中的,所以我加了 ...

既然都查看了API文档,居然还没发现问题......,原因是什么看我上面的回复。其实你都已经解决了问题了。
回复 使用道具 举报
lpflpy 发表于 2013-5-27 20:39
caw.writeTo(new FileWriter("D:\\charArray.txt"));    我看了下API文档,是写入流中的,所以我加了 ...

明白了,多谢啦!美女!
回复 使用道具 举报
lpflpy 中级黑马 2013-5-27 20:48:46
7#
本帖最后由 lpflpy 于 2013-5-27 20:50 编辑
无妄无涯 发表于 2013-5-27 20:42
既然都查看了API文档,居然还没发现问题......,原因是什么看我上面的回复。其实你都已经解决了问题了。 ...

嗯,多谢 io学的不好
fw = new FileWriter("D:\\charArray.txt");
    caw.writeTo(fw);
     fw.close();

与caw.writeTo( new FileWriter("D:\\charArray.txt"));

有什么区别?不都是这个流里面吗?一个匿名,一个非匿名的。
回复 使用道具 举报
刷啊  我去.....这么早就用eclipse了......
回复 使用道具 举报
lpflpy 发表于 2013-5-27 20:48
嗯,多谢 io学的不好
fw = new FileWriter("D:\\charArray.txt");
    caw.writeTo(fw);

我是为了能调用FileWriter的flush和close方法才写成非匿名的。在匿名的情况下,很明显调用不了。你给出的代码中不也是写成了非匿名的了吗?
回复 使用道具 举报
无妄无涯 发表于 2013-5-27 21:04
我是为了能调用FileWriter的flush和close方法才写成非匿名的。在匿名的情况下,很明显调用不了。你给出的 ...

哦,我明白了。如果匿名的话,不调close(),所以不会刷新。在调用close()方法的时候会自动刷新,所以不用再调flush()方法了,是不?:victory:
回复 使用道具 举报
lpflpy 发表于 2013-5-27 21:16
哦,我明白了。如果匿名的话,不调close(),所以不会刷新。在调用close()方法的时候会自动刷新,所以不 ...

嗯,是的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马