同步rest应用程序并保存到文件



我遇到了一种奇怪的情况,我有一些方法:

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();
}
}

最新更新