关于FileOutStream的write方法的疑问

关于FileOutStream的write方法的疑问

老师,在视频教程中说道FileOutStream中有一个write方法:

public void write(byte[] b):将b.lenth个字节(即byte数组中的所有数组)从指定byte数组写入此文件输出流中

请问,如果有一个循环是让字节数组b不断读取一个输入流的内容(即数组b的内容不断变化),在循环体内不断调用创建好的FileOutStream对象来调用该write方法不断写数据(参数就是数组b),那这样是循环的最后一次的数据会覆盖掉前面所有循环次数的数据么,不是后面写的内容追加?

while((n=fis.read())!=-1){  //循环条件是n不等于-1(即没读完文件数据)

    fos.write(b);

}

其中,fis、fos是事先定义好的字节输入流和字节输出流,b是实现定义好的用来存放读取输入流而获得的数据的字节数组

如:要读取的文件内容数据是:123

第一次读取到1,b数组内容是1

第二次读取到2,b数组内容是12

第三次读取到3,b数组内容是123

那么,

循环体内的fos调用的write方法

第一次写1

第二次写12

第三次写123

那么请问,最后写到字节输出流的数据是 123 还是 112123??(即是覆盖写还是追加写的问题)

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,创建输出流对象时,添加第二个参数。

参数值如果为true时,写入的数据追加到原来文本的末尾。

http://img1.sycdn.imooc.com//climg/5d133b3e0001485c04650052.jpg

如果为false时,表示写入的字节数据覆盖文本原来的内容。

http://img1.sycdn.imooc.com//climg/5d133bb400014bf204780054.jpg

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

吃吃吃鱼的猫 2019-06-26 12:11:06

同学你好,

1、调用write方法不断写入文件数据时,写入的数据会不断的追加到文本的末尾的,不会覆盖掉之前的数据。


2、以视频代码为例,再假设b的数组长度为2,要读取的文件内容数据是:123。

http://img1.sycdn.imooc.com//climg/5d12f081000149d905000104.jpg

则第一次读取的数据是:1,2两个字节。

写入文件两个字节:1,2。

接着开始第二次读取一个字节(原因:只剩下一个字节):3。

写入文件一个字节:3。


在写入到文件中时,将数据不断的追加到文本的末尾。


如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 提问者 哆丶哆 #1
    就是说在程序不断调用write方法的话是不断追加至末尾的。那么,如果这个文件里面本身是含有数据456的呢?那这个程序运行完后,这个文件内部数据是变成123还是456123(即是覆盖本文数据还是追加新文本数据)
    2019-06-26 17:04:16
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师