我想知道为什么我的程序会覆盖文本文件中的现有文本而不是添加新的文本行?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个赞
该代码会覆盖该文件,因为您没有OpenOption
在newBufferedWriter()
调用时指定 an 。
正如javadoc所说:
如果不存在任何选项,则此方法的工作方式就像存在
CREATE
、TRUNCATE_EXISTING
和WRITE
选项一样。换句话说,它打开文件进行写入,如果文件不存在则创建文件,或者如果存在则最初将现有文件截断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)
添加回答
举报
0/150
提交
取消