【问题标题】:FileOutput Stream delets text file contents [duplicate]FileOutputStream 删除文本文件内容[重复]
【发布时间】:2020-12-10 21:34:33
【问题描述】:
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 中的内容都会被删除,我不知道为什么? 但是当我只是 new FileInputStream 它不会发生。

【问题讨论】:

  • 顺便说一句,我不使用这个文件输出或类的任何方法。我只是新的。
  • 真正的答案在这里:阅读您正在使用的类的 javadoc。说真的,这就是所有编程的本质:你必须了解你在做什么。不要只使用您听说过的一些库类。研究它的作用,以及它是如何做事的。您的第一站始终是此类类的 javadoc。

标签: java file fileoutputstream


【解决方案1】:

你应该试试这个构造函数:

FileOutputStream fos = new FileOutputStream(f, true);

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

文档可用here

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 如果这个网站上还有其他答案可以复制到... ;-)
    【解决方案3】:

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

    字节被写入文件的开头。

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


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

    字节将被写入文件的末尾而不是开头。

    您将维护已写入文件的所有内容,并且您的数据将附加到文件中的现有数据中。

    【讨论】:

      猜你喜欢
      • 2016-10-09
      • 1970-01-01
      • 2015-02-14
      • 2013-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-30
      • 2012-06-20
      相关资源
      最近更新 更多