黑马程序员技术交流社区
标题:
对IO流的一个疑问?
[打印本页]
作者:
严露华
时间:
2013-5-3 16:03
标题:
对IO流的一个疑问?
import java.io.*;
public class CopyFile {
public static void main(String[] args)throws IOException {
copy();
}
public static void copy()throws IOException{
FileWriter fw = new FileWriter("D:\\程序和游戏\\myeclipse1\\java io\\src\\Demo.java");
FileReader fr = new FileReader("D:\\程序和游戏\\myeclipse1\\java io\\src\\RunCount.java");
char[] buf = new char[1024];
int len = 0;
while((len=fr.read(buf))!=-1)
{
fw.write(buf);
}
fw.close();
fr.close(); //为什么这两行代码放在这里就可以将文件打印出来呢?
FileReader f = new FileReader("D:\\程序和游戏\\myeclipse1\\java io\\src\\Demo.java");
char[] ch = new char[1024];
int i = 0;
while((i=f.read(ch))!=-1)
{
System.out.println(new String(ch,0,i));
}
//fw.close();
//fr.close(); //而放在这里却不能将文件打印出来?难道只有复制完成,关闭该流才能进行读取复制的文件吗?
f.close();
}
}
复制代码
疑问在代码里,求解?
作者:
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