public void save(TaskInfo<?> taskInfo) { try { File taskDirectory = getTaskDirectory(taskInfo.getId()); FileUtils.forceMkdir(taskDirectory); File tmpFile = new File(taskDirectory, UUID.randomUUID().toString()); File infoFile = getTaskInfoFile(taskInfo.getId()); objectMapper.writeValue(tmpFile, taskInfo); Files.move( tmpFile.toPath(), infoFile.toPath(), StandardCopyOption.ATOMIC_MOVE, StandardCopyOption.REPLACE_EXISTING); } catch (IOException e) { throw Throwables.propagate(e); } }