黑马程序员技术交流社区

标题: 使用IO流时需要注意的一点总结 [打印本页]

作者: 刘丽娜    时间: 2012-10-27 14:46
标题: 使用IO流时需要注意的一点总结
在JAVA中,FileInputStream,FileOutputStream,FileReader,FileWriter等类可以实现对文件的读写,读写的方式也可根据程序员需要而设定。一般来说,一个这样的IO对象在其生命周期内支持连续的写入,有些还能支持多次写入(对象流除外)。这里的多次写入是指每次写同一个文件的对象不一样,但文件的内容不是每次都从0开始,而是可以从文件原有的基础之上写入。如:

(情况一)

FileWriter out = new FileWriter(fileName);

out.write();

out.flush();

这里的写入每次都从0开始。

(情况二)

FileWriter out = new FileWriter(fileName,true);   //比上面多了一个布尔参数,表示从文件原有的基础之上进行写入

out.write();

out.flush();

上面两种情况除了在效果上不同外,其执行方面也有点不同,需要特别注意:

(情况一)中

FileWriter out = new FileWriter(fileName);后就将fileName文件清空,下面的操作完全从0开始;

而 (情况二)便没有些操作。

说了这么多,就是想提醒各位读者,一定要注意Writer是在什么情况,什么条件,或者说是哪个时间将文件清空的。

但这又有什么用呢?

没有用,但可以让你少犯错。如出现以下情况就很难发现了:

FileReader in = new FileReader(fileName);

FileWriter out = new FileWriter(fileName);

System.out.println(in.readLine());   //结果为null

out.write("hello");

out.flush();

上面的结果之后以为空是因为in读出前文件已经被out在定义时清空掉了,因而读取的是空文件。

这种情况需要特别注意!!!


作者: 崔政    时间: 2012-10-27 17:53
FileReader 有readLine()????
我记得好像是C#有readLine()。。。。{:soso_e132:}
作者: 孤傲的狼    时间: 2012-10-27 18:24
同意,我也似乎记得是c#有readLine(),但是还是要谢谢你的总结




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