关闭流的问题
public static void main(String[] args) throws IOException {
/*
* BufferedWriter写操作
*/
//实例化一个FileWriter对象
FileWriter fw=new FileWriter("C:/myDoc/hello.txt");
//实例化一个BufferWriter对象
BufferedWriter bw=new BufferedWriter(fw);
bw.write("大家好,我要修改内容了");
bw.write("我正在学习bufferedwriter");
bw.newLine();
bw.write("请多多指教!");
bw.newLine();
bw.flush();//刷新缓冲区
fw.close();//关闭流
书上面写的这个bw刷新之后为什么没有关闭流啊
[解决办法]
我觉得有些流可能不需要关闭。
比如System.out,这个out也是流,我试用他后,就没关闭过。
[解决办法]
http://blog.sina.com.cn/s/blog_6307d85b0100gqtt.html
[解决办法]
刷新只是把缓冲区的东西刷新出去,比如缓存最大1024个字符,读了512个,刷新了,文件才有512个字符,不刷新,文件什么都没有,等缓存1024都不够了,自动刷新,close()方法里面会调用flush()
[解决办法]
flush和close是两个不同的功能,flush为什么会关闭流呢?
flush只是用来清空缓冲区的,把信息及时发到流上, 跟关闭流一点关系都没有.
而close方法则会在关闭之前调用flush刷新后执行关闭.
[解决办法]
BufferedWriter close()是需要的,最外层close(),里面套的可以不关,
书上完全写错了,代码不应该这样写,如果做示例入门就不追究了,还有jdk7.0后可以try(){}
public static void main(String[] args) {
BufferedWriter bw = null;
try {
bw = new BufferedWriter(new FileWriter("file"));
} catch (IOException e) {
// 记录日志,是否抛异常由业务决定
} finally {
if (bw != null) { // 最外层关了,FileWriter不需要
try {
bw.close();
} catch (IOException e) {
// 记录日志
}
}
}
// jdk 1.7以后
try (FileWriter f = new FileWriter("file"); BufferedWriter w = new BufferedWriter(f);) {
// Writer implements Closeable,jdk会去调用close();
} catch (IOException
[解决办法]
RuntimeException e) { //
[解决办法]
或者的意思
}
}