为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

犯罪嫌疑人X 2019-10-14 12:08:21
这样不会出现不会不断地写入,然后不断清空的情况吗?因为我看过这样的案例,如下图:
查看完整描述

3 回答

?
千万里不及你

TA贡献1784条经验 获得超9个赞

你前面回复中的理解的前半部分基本上是对的。

但不是在第 18 行的 write 方法中加入额外的参数,而是在构造 FileOutputStream 对象时加入一个 boolean 值参数,比如:

new FileOutputStream("文件名", true);

这里第二个参数的意义是“是否以追加模式创建文件”。

FileOutputStream 文件输出字节流的这两个构造方法对应不同的创建文件模式:

(String) 参数的方法表示以普通方式创建文件;(String, boolean) 参数的方法,如果第二个参数为 true 表示以追加模式创建文件。

普通模式下,如果你指定文件名的那个文件存在,本次写入是仍会从文件开头写入(或者说清空原文件写入);而追加模式下,如果你指定文件名的那个文件存在,本次写入就会那个文件已有内容的后面写入(或者说从文件尾部写入),这样文件原有的内容就不会被清空。

注意,指定写入方式只是在你创建文件时(或者说是构造 FileOutputStream 对象时),而向流中写入内容的方法都是 write(int),这个写入方法没有额外的参数。


所以,第一个图片中 20 行的代码是正确的。而最后一个图片代码中的关键区别是在第 17 行构造文件输出字节流对象时的第二个调用参数 true 上。


查看完整回答
反对 回复 2019-10-15
?
慕容森

TA贡献1853条经验 获得超18个赞

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

查看完整回答
反对 回复 2019-10-15
?
月关宝盒

TA贡献1772条经验 获得超5个赞

我懂了,第一张图片里因为是创建了输出对象后,一次次地往里面写入东西,所以,写入的东西就按照顺序一个个都被存进去了,

然后第二章图片里面,是因为原来就存在这样的文件,之后以这个文件创建输出对象的时候,把这个文件原来里面的东西都清空了。如果我在第18行代码后面再加上什么内容,之前写入的100也是不会被删掉的,是这样吧?


查看完整回答
反对 回复 2019-10-15
  • 3 回答
  • 0 关注
  • 359 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信