为什么每次重新启动程序时都会删除此data.txt文件?

时间:2011-07-25 00:37:23

标签: java file io writer

我有一个只保存1个单词的简单文本文件,但每当我重新启动程序时,data.txt中的所有内容都会被删除 - 我不知道为什么?

全班代码:

import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;

public class InfoSaver {
    File data = new File("data.txt");
    FileOutputStream fos;
    PrintStream writer;
    FileInputStream fis;
    DataInputStream reader;
    public void init() throws IOException{
        fos = new FileOutputStream(data);
        writer = new PrintStream(fos);
        fis = new FileInputStream(data);
        reader = new DataInputStream(fis);

    }
    public void writeData(String info) {
        writer.println(info);

    }
    public String readData() throws IOException{
        return reader.readLine();
    }
    public void close() throws IOException{
        writer.close();
        reader.close();
    }
}

4 个答案:

答案 0 :(得分:5)

要添加到现有文件而不是覆盖它,请使用FileOutputStream的构造函数,让您以追加模式打开它。

fos = new FileOutputStream(data, true);

答案 1 :(得分:2)

由于这一行:

 fos = new FileOutputStream(data);

This version of the constructor of FileOutputStream会覆盖该文件,但您可以使用this version

public FileOutputStream(File file,
                        boolean append)
                 throws FileNotFoundException

您必须通过将append字段设置为true来指定要附加到文件。

答案 2 :(得分:0)

您没有在文件中附加新信息,而是覆盖它。

任何时候你只需在

中打开它
  

fos = new FileOutputStream(data);

命令,无论你是否保存了任何内容,它都会被清空。

答案 3 :(得分:0)

您的FileOutputStream正在覆盖您的文件。如果要追加到文件末尾,则需要指定:

fos = new FileOutputStream(data, true);

当您遇到意外行为时,最好检查API以确保您调用的函数正在执行您期望的操作。 FileOutputStream构造函数的Here is the API