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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 严露华 中级黑马   /  2013-5-3 16:03  /  1159 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. import java.io.*;
  2. public class CopyFile {

  3.         public static void main(String[] args)throws IOException {
  4.                 copy();
  5.         }
  6.         public static void copy()throws IOException{
  7.                 FileWriter fw = new FileWriter("D:\\程序和游戏\\myeclipse1\\java io\\src\\Demo.java");
  8.                 FileReader fr = new FileReader("D:\\程序和游戏\\myeclipse1\\java io\\src\\RunCount.java");
  9.                 char[] buf = new char[1024];
  10.                 int len = 0;
  11.                 while((len=fr.read(buf))!=-1)
  12.                 {
  13.                         fw.write(buf);
  14.                 }
  15. fw.close();
  16. fr.close();                 //为什么这两行代码放在这里就可以将文件打印出来呢?
  17.                 FileReader f = new FileReader("D:\\程序和游戏\\myeclipse1\\java io\\src\\Demo.java");
  18.                 char[] ch = new char[1024];
  19.                 int i = 0;
  20.                 while((i=f.read(ch))!=-1)
  21.                 {
  22.                         System.out.println(new String(ch,0,i));
  23.                 }
  24. //fw.close();
  25. //fr.close();          //而放在这里却不能将文件打印出来?难道只有复制完成,关闭该流才能进行读取复制的文件吗?
  26.                 f.close();
  27.         }

  28. }
复制代码
疑问在代码里,求解?

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

3 个回复

倒序浏览
本帖最后由 xuluheng718 于 2013-5-3 18:51 编辑

首先,字符流写入是把字符写入了内存中,假如没有调用flush()或者closs(),它是不会把内存中的数据写到要存储的文件中的。
flush()只做刷新动作,但是不关闭流,而close()是关闭并刷新流。
你在上面调用了closs(),这时候close()先自动调用了fiush(),把流中的数据写入了你要存储的文件中,这时候你下面再用读取方法是可以读到里面的数据的。
而你把close()放到了下面,程序在你读你的Demo.java的文件前,你上面要写入的数据还在流中,并没有写入到你的硬盘文件中。你的Demo.java文件
中并没有数据存在,当然它是不能帮你打印出来。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
close()打成closs(),修改下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马