FileOutputStream 删除文本文件内容

FileOutput Stream delets text file contents

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 时,它并没有发生。

FileOutputStream 默认覆盖文件(如果存在)。您可以使用 overloaded constructor 附加到该文件而不是覆盖它:

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

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

FileOutputStream fos = new FileOutputStream(f, true);

因此,如果文件已经存在,您必须添加到文件中的内容将被追加。

文档可用here

If 被删除,因为它实际上被覆盖。每次使用 new FileOutputStream(File file) 构造函数创建新的 FileOutputStream 对象时,新的 FileDescriptor 为 created,因此:

bytes are written to the beginning of the file.

你可以这样想,就像它通过覆盖文件中以前存在的所有内容来开始写入文件。


您也可以使用 FileOutputStream(File f, boolean append) 构造函数创建 FileOutputStream 对象,将 true 作为布尔参数传递给该构造函数,并在 this 案例:

bytes will be written to the end of the file rather than the beginning.

您将保留已写入文件的任何内容,并且您的数据将附加到文件中的现有数据。