Почему этот файл data.txt удаляется при каждом перезапуске программы? - PullRequest
0 голосов
/ 25 июля 2011

У меня есть простой текстовый файл, который будет сохранять только 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 ]

5 голосов
/ 25 июля 2011

Чтобы добавить в существующий файл вместо его перезаписи, используйте конструктор FileOutputStream, который позволяет открывать его в режиме добавления.

fos = new FileOutputStream(data, true);
2 голосов
/ 25 июля 2011

Из-за этой строки:

 fos = new FileOutputStream(data);

Эта версия конструктора FileOutputStream заменит файл, но вы можете использовать эту версию :

public FileOutputStream(File file,
                        boolean append)
                 throws FileNotFoundException

Вы должны указать, что хотите добавить в файл, установив для поля append значение true.

0 голосов
/ 25 июля 2011

Ваш FileOutputStream перезаписывает ваш файл. Если вы хотите добавить в конец файла, вам нужно указать следующее:

fos = new FileOutputStream(data, true);

Когда вы сталкиваетесь с неожиданным поведением, рекомендуется проверить API, чтобы убедиться, что вызываемые вами функции выполняют то, что вы ожидаете. Вот API для конструктора FileOutputStream.

0 голосов
/ 25 июля 2011

Вы не добавляете новую информацию в файл, вы перезаписываете ее.

Каждый раз, когда вы просто открываете его в

fos = new FileOutputStream (data);

команда, она очищается, независимо от того, что вы сохранили внутри нее или нет.

...