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.
您将保留已写入文件的任何内容,并且您的数据将附加到文件中的现有数据。
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.
您将保留已写入文件的任何内容,并且您的数据将附加到文件中的现有数据。