我正在建立一个租车计划,我现在想要的是:
使用.txt文件存储数据。
使用我编写的代码,我只能注册一辆车和用户。每次我运行客户端或汽车的寄存器方法时,最后一个寄存器都会被删除。
你能帮我解决这个问题吗?此外,稍后我将实施租车方式,但我也不知道如何做到这一点,所以如果您对如何做到这一点有任何想法,请告诉我!
此外,我打算在没有SQL或其他东西的情况下这样做。
这是我用来注册用户的代码(我使用带有JForm的netbeans):
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
String nomeClient = txtNomeClient.getText();
String idClient = txtIdClient.getText();
File file = new File("clients.txt");
try {
PrintWriter output = new PrintWriter(file);
output.println(nomeClient);
output.println(idClient);
output.close();
JOptionPane.showMessageDialog(null, "Client registed!");
} catch (FileNotFoundException e) {
}
}
答案 0 :(得分:2)
问题是您通过调用clients.txt
覆盖现有文件new PrintWriter(file)
,而不是追加。您可以使用以下代码:
FileWriter fileWriter = new FileWriter(file, true);
PrintWriter output = new PrintWriter(fileWriter));
这样,您追加文件的末尾,请参阅构造函数FileWriter(File file, boolean append)
。文档完美地描述了它:
在给定File对象的情况下构造FileWriter对象。如果第二个参数为true,则字节将写入文件的末尾而不是开头。
FileWriter
仅用于以追加模式打开文件,因为PrintWriter
没有合适的构造函数来直接执行此操作。你也可以用它来写字符,但PrintWriter
允许格式化输出。来自FileWriter
的{{3}}:
用于编写字符文件的便捷类。此类的构造函数假定默认字符编码和默认字节缓冲区大小是可接受的。
PrintWriter
使用其构造函数中传递的FileWriter
附加到目标文件,有关详细说明,请参阅documentation。如上所述,您还可以使用FileOutputStream
。有多种方法可以做到这一点。
这是一个使用FileOutputStream
和BufferedWriter
的示例,它支持缓冲并可以减少不必要的写入,从而影响性能。
FileOutputStream fileOutputStream = new FileOutputStream("clients.txt", true);
BufferedWriter bufferedWriter = new BufferedWriter(fileOutputStream);
PrintWriter printWriter = new PrintWriter(bufferedWriter);