我正在学习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();
}
}
答案 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);
附加到该文件。