我遇到了一种奇怪的情况,我有一些方法:
public void generateRecords(Request request) {
String pathToFile = request.getPathFile();
String recordOne = generateRecordOne(request);
String recordTwo = generateRecordTwo(request);
fileService.writeToFile(pathToFile, recordOne);
fileService.writeToFile(pathToFile, recordTwo);
}
public void writeToFile(String path, String content) {
try {
FileWriter writer = new FileWriter(path, true);
writer.append(content);
writer.close();
} catch (IOException e) {
e.printStack();
}
}
generateRecords((正在执行rest端点。我得到了这样的东西:
id:1:record1
id:2:record1
id:1:record2
id:2:record2
而我想得到这样的东西:
id:1:record1
id:1:record2
id:2:record1
id:2:record2
它有时会发生,但它仍然在破坏我的文件。我该如何避免这种情况?
尝试在writeToFile方法上使用synchronized
。
此外,请考虑使用try-with-resources语句。在您现在拥有的代码中,编写器中的异常会导致无法关闭FileWriter。
public synchronized void writeToFile(String path, String content) {
try (FileWriter writer = new FileWriter(path, true)) {
writer.append(content);
} catch (IOException e) {
e.printStackTrace();
}
}