我使用java编辑包含JSON的文件:
public void editApi(String path, String nameOfOldApi, API updatedApi)
throws IOException, ParseException
{
String apiPath = path + "\\" + updatedApi.getTeamName() + "\\";
Gson gson = new Gson();
ObjectMapper mapper = new ObjectMapper();
String updatedJsonString = gson.toJson(updatedApi);
JSONObject jsonToBeEditted = mapper.readValue(new File(apiPath + nameOfOldApi + ".json"), JSONObject.class);
JSONObject updatedJson = mapper.readValue(updatedJsonString, JSONObject.class);
for (Object key : jsonToBeEditted.keySet()) {
if (key.equals("tags") || key.equals("paths")) {
continue;
} else if (!jsonToBeEditted.get(key).equals(updatedJson.get(key))) {
System.out.println(jsonToBeEditted.get(key) + "--->" + updatedJson.get(key));
jsonToBeEditted.put(key, updatedJson.get(key));
}
}
mapper.writeValue(new File(apiPath + updatedApi.getInfo().getTitle() + ".json"), jsonToBeEditted);
if (!updatedApi.getInfo().getTitle().equals(nameOfOldApi)) {
Files.delete(new File(apiPath + nameOfOldApi + ".json").toPath());
}
}
当我运行程序(这是一个弹簧应用程序,如果它是相关的)并打电话给它时,它第一次正常工作。但是,如果我再次尝试编辑同一个文件,我会收到一个FileSystemException,说该文件正由另一个进程使用。例如,如果我有一个文件'test.json'并且我将其编辑为'test edit.json',它会正确添加新文件并删除旧文件。但是,如果我然后将'test edit.json'编辑为'test edit again.json',则会抛出此错误:
java.nio.file.FileSystemException: C:\stackoverflow.json: The process cannot access
the file because it is being used by another process.
我迷失了它发生的地方......我觉得在ObjectMapper.writeValue()
电话中某些事情没有被正确关闭,但我不确定。