fileoutput流删除文本文件内容

kpbpu008  于 2021-07-08  发布在  Java
关注(0)|答案(3)|浏览(503)

这个问题在这里已经有答案了

如何使用fileoutputstream写入数据而不丢失旧数据(2个答案)
5个月前关门了。

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;

public class FileIoStream {

    public static void main(String[] args) throws IOException {
        File f = new File("C:\\Users\\rs\\IO\\myfile.txt");
        FileInputStream fis = new FileInputStream(f);
        FileOutputStream fos = new FileOutputStream(f);
    }
}

每次我为fileoutputstream创建一个对象时,myfile.txt中的内容都会被删除,我不知道为什么?但当我只是新建fileinputstream时,它不会发生。

a14dhokn

a14dhokn1#

FileOutputStream 默认情况下,覆盖文件(如果存在)。您可以使用重载构造函数附加到该文件,而不是覆盖该文件:

FileInputStream fis = new FileInputStream(f, true);
// Here -------------------------------------^
dba5bblo

dba5bblo2#

您应该尝试使用此构造函数:

FileOutputStream fos = new FileOutputStream(f, true);

因此,如果文件已存在,则必须添加到该文件的内容将被追加。
此处提供文档

nzkunb0c

nzkunb0c3#

如果被删除,因为它实际上被覆盖了。每次创建新的fileoutputstream对象时 new FileOutputStream(File file) 构造函数,则会创建一个新的filedescriptor,因此:
字节写入文件的开头。
你可以这样想,就像它通过覆盖文件中以前存在的所有内容开始写入文件一样。
您也可以使用 FileOutputStream(File f, boolean append) 构造函数,通过 true 作为布尔参数输入到构造函数中,在本例中:
字节将写入文件的结尾而不是开头。
您将维护已写入文件的内容,并且您的数据将附加到文件中的现有数据中。

相关问题