对于第一个图片中的第20行代码不是很理解

https://img4.mukewang.com/5d2bf6ab000146df10740261.jpg

这样不会出现不会不断地写入,然后不断清空的情况吗?

因为我看过这样的案例,如下图:

https://img3.mukewang.com/5d2bf6ab0001226306080447.jpg

https://img1.mukewang.com/5d2bf6ab0001658606240417.jpg


qq_慕婉清9181605
浏览 645回答 3
3回答

onemoo

你前面回复中的理解的前半部分基本上是对的。但不是在第 18 行的 write 方法中加入额外的参数,而是在构造 FileOutputStream 对象时加入一个 boolean 值参数,比如:new FileOutputStream("文件名", true);这里第二个参数的意义是“是否以追加模式创建文件”。FileOutputStream 文件输出字节流的这两个构造方法对应不同的创建文件模式:(String) 参数的方法表示以普通方式创建文件;(String, boolean) 参数的方法,如果第二个参数为 true 表示以追加模式创建文件。普通模式下,如果你指定文件名的那个文件存在,本次写入是仍会从文件开头写入(或者说清空原文件写入);而追加模式下,如果你指定文件名的那个文件存在,本次写入就会那个文件已有内容的后面写入(或者说从文件尾部写入),这样文件原有的内容就不会被清空。注意,指定写入方式只是在你创建文件时(或者说是构造 FileOutputStream 对象时),而向流中写入内容的方法都是 write(int),这个写入方法没有额外的参数。所以,第一个图片中 20 行的代码是正确的。而最后一个图片代码中的关键区别是在第 17 行构造文件输出字节流对象时的第二个调用参数 true 上。

cxxyjsj

构造方法中append==true, 只会在初始化时设置写入指针的当前位置。 

qq_慕婉清9181605

我懂了,第一张图片里因为是创建了输出对象后,一次次地往里面写入东西,所以,写入的东西就按照顺序一个个都被存进去了,然后第二章图片里面,是因为原来就存在这样的文件,之后以这个文件创建输出对象的时候,把这个文件原来里面的东西都清空了。如果我在第18行代码后面再加上什么内容,之前写入的100也是不会被删掉的,是这样吧?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java