diff --git a/diylc/diylc-core/src/org/diylc/presenter/update.xml b/diylc/diylc-core/src/org/diylc/presenter/update.xml index 1ad15be7..251a945e 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/update.xml +++ b/diylc/diylc-core/src/org/diylc/presenter/update.xml @@ -3133,7 +3133,11 @@ IMPROVEMENT Improved Dutch translation - + + + IMPROVEMENT + Make file writes more resilient to crashes to avoid loss of data + BUG_FIX "Outline Mode" produces rendering issues when "Cache Boost" feature is enabled diff --git a/diylc/diylc-core/src/org/diylc/serialization/ProjectFileManager.java b/diylc/diylc-core/src/org/diylc/serialization/ProjectFileManager.java index 1e573aaf..067dcc83 100644 --- a/diylc/diylc-core/src/org/diylc/serialization/ProjectFileManager.java +++ b/diylc/diylc-core/src/org/diylc/serialization/ProjectFileManager.java @@ -148,14 +148,19 @@ public class ProjectFileManager { public synchronized void serializeProjectToFile(Project project, String fileName, boolean isBackup) throws IOException { if (!isBackup) { - LOG.info(String.format("saveProjectToFile(%s)", fileName)); + LOG.info(String.format("serializeProjectToFile(%s)", fileName)); } - FileOutputStream fos; - fos = new FileOutputStream(fileName); + FileOutputStream fos; + // write to a temp file to avoid loss of data in case of crash + String tempName = fileName + ".temp"; + fos = new FileOutputStream(tempName); Writer writer = new OutputStreamWriter(fos, "UTF-8"); writer.write("\n"); xStream.toXML(project, writer); - fos.close(); + fos.close(); + // switch the files at the end + new File(fileName).delete(); + new File(tempName).renameTo(new File(fileName)); if (!isBackup) { this.currentFileName = fileName; this.modified = false;