Данные, записанные с использованием FileOutputStream, исчезают после перезапуска программы - PullRequest
0 голосов
/ 02 февраля 2012

Я изучаю Java, и я сделал простую программу, которая просто считывает значение из JTextField и сохраняет его в файл, используя FileOutputStream.
Мой вопрос: это нормально для данных, которые невозможно прочитать (используя ту же программу с FileInputStream) после перезапуска? Если я читаю это без завершения программы, она работает нормально.
Как я могу сделать запись данных в файл?
Изменить:
Кажется, что файл очищается при запуске программы.
Вот код:

public class Test extends JFrame
{
JTextField field;
JButton write;
JButton read;
File file;
FileOutputStream fOut;
FileInputStream fIn;
int x;

Test() throws IOException
{
    setAlwaysOnTop(true);
    setLayout(new BorderLayout());
    field = new JTextField(4);
    write = new JButton("Write");
    read = new JButton("Read");
    file = new File("save.txt");
    if(!file.exists())
    {
        file.createNewFile();
    }
    fOut = new FileOutputStream(file);
    fIn = new FileInputStream(file);
    add(field);
    add(write, BorderLayout.LINE_START);
    add(read, BorderLayout.LINE_END);
    setVisible(true);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setSize(160,60);
    write.addActionListener(new ActionListener()
    {
        public void actionPerformed(ActionEvent e)
        {
            x = Integer.parseInt(field.getText());
            try
            {
                fOut.write(x);
                System.out.println("Saving completed.");
                fOut.flush();
            }
            catch(Exception exc)
            {
                System.out.println("Saving failed.");
            }

        }
    });
    read.addActionListener(new ActionListener() 
    {
        public void actionPerformed(ActionEvent e) 
        {
            try
            {
                x = fIn.read();
                fIn.close();
            }
            catch(Exception exc)
            {
                System.out.println("Reading failed.");
            }
        }
    });
}
public static void main(String[] args) throws IOException
{
    new Test();
}
}

Ответы [ 3 ]

1 голос
/ 02 февраля 2012

Убедитесь, что вы flush() и close() потоки.

0 голосов
/ 02 февраля 2012

Этот fOut = new FileOutputStream(file); перезапишет файл, вам нужно использовать fOut = new FileOutputStream(file, true);, чтобы добавить к нему.

0 голосов
/ 02 февраля 2012

вот какой-то код, чтобы открыть файл для записи ... обратите внимание на параметр "true", который означает, что мы ДОБАВЛЯЕМ текст в конце, а не добавляем его в начало. То же самое касается FileOutputStream. Если вы не укажете второй аргумент (true), вы получите перезаписанный файл.

try{
  // Create file 
  FileWriter fstream = new FileWriter("out.txt",true);
  BufferedWriter out = new BufferedWriter(fstream);
  out.write("Hello Java");
  //Close the output stream
  out.close();
  }catch (IOException e){//Catch exception if any
  System.err.println("Error: " + e.getMessage());
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...