为了账号安全,请及时绑定邮箱和手机立即绑定

Java,如何编写或添加而不是覆盖文本文件?

Java,如何编写或添加而不是覆盖文本文件?

陪伴而非守候 2023-10-19 14:50:54
我想知道为什么我的程序会覆盖文本文件中的现有文本而不是添加新的文本行?public class WriteToFile {    public void registerTrainingSession(Customer customer) {        Path outFilePath = Paths.get("C:\\Users\\Allan\\Documents\\Nackademin\\OOP\\Inlämningsuppgift2\\visits.txt");        try (BufferedWriter save = Files.newBufferedWriter(outFilePath)) {            String trainingSession = String.format("Member: %s %s\nPersonalnumber: %s\nTraining session date: %s\n", customer.getFirstName(),                    customer.getLastName(), customer.getPersonalNumber(), LocalDate.now());            save.write(trainingSession);            save.flush();        }        catch (NullPointerException e) {            JOptionPane.showMessageDialog(null, "Customer info is missing!");        }        catch (IOException e) {            JOptionPane.showMessageDialog(null, "File could not be created.");        }    }}
查看完整描述

1 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

该代码会覆盖该文件,因为您没有OpenOptionnewBufferedWriter()调用时指定 an 。

正如javadoc所说:

如果不存在任何选项,则此方法的工作方式就像存在CREATETRUNCATE_EXISTINGWRITE选项一样。换句话说,它打开文件进行写入,如果文件不存在则创建文件,或者如果存在则最初将现有文件截断regular-file为大小。0

尝试:

 Files.newBufferedWriter(outFilePath, StandardOpenOption.CREATE,
                                      StandardOpenOption.APPEND,
                                      StandardOpenOption.WRITE)

或者,如果文件必须已经存在,如果不存在则失败:

 Files.newBufferedWriter(outFilePath, StandardOpenOption.APPEND,
                                      StandardOpenOption.WRITE)

写入新文件,如果文件已存在则失败

 Files.newBufferedWriter(outFilePath, StandardOpenOption.CREATE_NEW,
                                      StandardOpenOption.WRITE)


查看完整回答
反对 回复 2023-10-19
  • 1 回答
  • 0 关注
  • 68 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信