-1

我有一个简单的 txt 文件,它只保存 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

4 回答 4

5

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

fos = new FileOutputStream(data, true);
于 2011-07-25T00:43:52.397 回答
2

因为这条线:

 fos = new FileOutputStream(data);

此版本的 FileOutputStream 构造函数将覆盖文件,但您可以使用此版本

public FileOutputStream(File file,
                        boolean append)
                 throws FileNotFoundException

您必须通过将append字段设置为true.

于 2011-07-25T00:42:03.580 回答
0

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

任何时候只要在

fos = 新文件输出流(数据);

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

于 2011-07-25T00:42:53.647 回答
0

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

fos = new FileOutputStream(data, true);

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

于 2011-07-25T00:47:10.290 回答