黑马程序员技术交流社区

标题: 对IO流的一个疑问? [打印本页]

作者: 严露华    时间: 2013-5-3 16:03
标题: 对IO流的一个疑问?
  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. }
复制代码
疑问在代码里,求解?

作者: xuluheng718    时间: 2013-5-3 16:46
本帖最后由 xuluheng718 于 2013-5-3 18:51 编辑

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




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