重启程序后,使用FileOutputStream写入的数据消失

时间:2012-02-02 15:52:14

标签: java io

我正在学习java,我制作了一个简单的程序,它只是从JTextField读取值并使用FileOutputStream将其保存到文件中。
我的问题是:重启后数据不可读(使用与FileInputStream相同的程序)是否正常?如果我在没有终止程序的情况下阅读它,它可以正常工作 如何将数据写入文件permament?
编辑:
启动程序时似乎正在清理文件 这是代码:

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 个答案:

答案 0 :(得分:1)

确保您flush()close()信息流。

答案 1 :(得分:0)

这里有一些打开文件进行编写的代码..观察“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());
  }

答案 2 :(得分:0)

fOut = new FileOutputStream(file);将覆盖该文件,您需要使用fOut = new FileOutputStream(file, true);附加到该文件。