Java PrintWriter追加方法未追加
下面的方法只写出我添加的最新项,它不会附加到以前的项中。我做错了什么Java PrintWriter追加方法未追加,java,printwriter,Java,Printwriter,下面的方法只写出我添加的最新项,它不会附加到以前的项中。我做错了什么 public void addNew() { try { PrintWriter pw = new PrintWriter(new File("persons.txt")); int id = Integer.parseInt(jTextField.getText()); String name = jTextField1.getText(); Strin
public void addNew() {
try {
PrintWriter pw = new PrintWriter(new File("persons.txt"));
int id = Integer.parseInt(jTextField.getText());
String name = jTextField1.getText();
String surname = jTextField2.getText();
Person p = new Person(id,name,surname);
pw.append(p.toString());
pw.append("sdf");
pw.close();
} catch (FileNotFoundException e) {...}
}
PrintWriter
的方法被称为append()
,这并不意味着它改变了打开文件的模式
您还需要以追加模式打开文件:
PrintWriter pw = new PrintWriter(new FileOutputStream(
new File("persons.txt"),
true /* append = true */));
还请注意,文件将以系统默认编码写入。这并不总是需要的,并且可能会导致互操作性问题,您可能需要明确指定文件编码
PrintWriter pw = new PrintWriter(new FileOutputStream(new File("persons.txt"),true));
true
是附加标志。请参阅。以追加模式打开文件,如下代码所示:
PrintWriter pw = new PrintWriter(new FileOutputStream(new File("persons.txt"), true));
IMPO接受的答案不考虑意图写字符的事实。(我知道这个主题很古老,但因为在搜索同一主题时,我在找到建议的解决方案之前偶然发现了这篇文章,所以我在这里发布。) 从中,当您想要打印字节时,可以使用
FileOutputStream
FileOutputStream用于写入原始字节流,例如
图像数据。编写字符流时,请考虑使用
文件编写器
此外,从以下方面:
除非需要提示输出,否则建议将
BufferedWriter围绕任何Writer,其write()操作可能是
昂贵,例如文件写入程序和OutputStreamWriter
最后,答案如下(如上所述):
另外,从Java7开始,您可以使用try with resources语句。不
最后,关闭已声明的资源需要块,因为
它是自动处理的,而且不太冗长:
try(PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("writePath", true)))) {
out.println("the text");
}catch (IOException e) {
System.err.println(e);
}
您不需要像所有其他答案中所示的那样进行双重缓冲。 你可以简单地做
PrintWriter pw = new PrintWriter(new FileWriter("persons.txt",true));
这就像唤醒了沉睡的线,为此感到抱歉。但我有一个疑问。如果只给我文件对象,并且不允许我使用流类(例如FileOutputStream等),我将如何在文件中执行追加操作。我被允许的是:Printwriter pw=新的Printwriter(文件);:我尝试了append()、write()、print()。在这种情况下,是否有任何现成的追加方法。作为澄清,PrintWriter的“append()”方法指的是它追加到写入程序,即它本身,即它自己的输出流,而不是文件。关于@user1707035的问题,否,看起来,如果不使用OutputStream对象构造PrintWriter,就无法使用PrintWriter进行追加。这是因为PrintWriter在流实例化时打开流,并且只有支持File或filename作为参数的构造函数通过内部构造一个OutputStream对象(不带“append”参数)来打开文件。参考(文件):
PrintWriter pw = new PrintWriter(new FileWriter("persons.txt",true));