public void save() { try { if (file.getParentFile() != null) { file.getParentFile().mkdirs(); } if (!file.exists() && !file.createNewFile()) { return; } if (file.canWrite()) { FileOutputStream fos = new FileOutputStream(file); BufferedWriter buffer = new BufferedWriter(new OutputStreamWriter(fos, defaultEncoding)); buffer.write("# Configuration file\r\n"); buffer.write("# Generated on " + DateFormat.getInstance().format(new Date()) + "\r\n"); buffer.write("\r\n"); for (Map.Entry<String, Map<String, Property>> category : categories.entrySet()) { buffer.write("####################\r\n"); buffer.write("# " + category.getKey() + " \r\n"); if (customCategoryComments.containsKey(category.getKey())) { buffer.write("#===================\r\n"); String comment = customCategoryComments.get(category.getKey()); Splitter splitter = Splitter.onPattern("\r?\n"); for (String commentLine : splitter.split(comment)) { buffer.write("# "); buffer.write(commentLine + "\r\n"); } } buffer.write("####################\r\n\r\n"); String catKey = category.getKey(); if (!allowedProperties.matchesAllOf(catKey)) { catKey = '"' + catKey + '"'; } buffer.write(catKey + " {\r\n"); writeProperties(buffer, category.getValue().values()); buffer.write("}\r\n\r\n"); } buffer.close(); fos.close(); } } catch (IOException e) { e.printStackTrace(); } }