分析Java中OutputStream打开文件的行为
看如下代码:
@Test |
运行如上代码会发生什么?
看起来这个代码是只new了一个FileWriter对象,实际上当这个对象被new出来后,test.file
文件内容就已经被清空了,也就是创建对象后没有做任何write, flush以及close等行为。
只是简单的new 了一下,就已经把文件现有内容清空了。这里不单是FileWriter,所有文件相关的output stream都是如此,FileWriter本质上也是创建了一个FileOutputStream。
而FileOutputStream的行为是:
public FileOutputStream(String name) throws FileNotFoundException { |
也就是默认append是false,最终Java中的所有output stream都会进入c的方法:
/** |
然后回归到操作系统的的io流,当操作系统以非append的方式去打开一个文件的时候,会冲掉这个文件本身的内容,所以映射到java这个层面,就是创建了一个对象,文件内容没了。
扫码手机观看或分享: