diff --git a/src/cn/citycraft/SimpleProtect/config/FileConfig.java b/src/cn/citycraft/SimpleProtect/config/FileConfig.java index 70a3ae8..24a6c30 100644 --- a/src/cn/citycraft/SimpleProtect/config/FileConfig.java +++ b/src/cn/citycraft/SimpleProtect/config/FileConfig.java @@ -1,5 +1,6 @@ package cn.citycraft.SimpleProtect.config; +import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; @@ -7,6 +8,7 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; +import java.io.Reader; import java.io.Writer; import java.util.logging.Level; @@ -25,14 +27,15 @@ import com.google.common.base.Charsets; import com.google.common.io.Files; /** - * An implementation of {@link Configuration} which saves all files in Yaml. - * Note that this implementation is not synchronized. + * An implementation of {@link Configuration} which saves all files in Yaml. Note that this + * implementation is not synchronized. */ public class FileConfig extends YamlConfiguration { public static FileConfig init(File file) { return FileConfig.loadConfiguration(file); } + public static FileConfig loadConfiguration(File file) { Validate.notNull(file, "File cannot be null"); FileConfig config = new FileConfig(); @@ -46,28 +49,43 @@ public class FileConfig extends YamlConfiguration { } return config; } + protected final DumperOptions yamlOptions = new DumperOptions(); protected final Representer yamlRepresenter = new YamlRepresenter(); - protected final Yaml yaml = new Yaml(new YamlConstructor(), - yamlRepresenter, yamlOptions); + protected final Yaml yaml = new Yaml(new YamlConstructor(), yamlRepresenter, yamlOptions); @Override - public void load(File file) throws FileNotFoundException, IOException, - InvalidConfigurationException { + public void load(File file) throws FileNotFoundException, IOException, InvalidConfigurationException { Validate.notNull(file, "File cannot be null"); final FileInputStream stream = new FileInputStream(file); load(new InputStreamReader(stream, Charsets.UTF_8)); } + @Override + public void load(Reader reader) throws IOException, InvalidConfigurationException { + BufferedReader input = (reader instanceof BufferedReader) ? (BufferedReader) reader + : new BufferedReader(reader); + StringBuilder builder = new StringBuilder(); + try { + String line; + while ((line = input.readLine()) != null) { + builder.append(line); + builder.append('\n'); + } + } finally { + input.close(); + } + loadFromString(builder.toString()); + } + @Override public void save(File file) throws IOException { Validate.notNull(file, "File cannot be null"); Files.createParentDirs(file); String data = saveToString(); - Writer writer = new OutputStreamWriter(new FileOutputStream(file), - Charsets.UTF_8); + Writer writer = new OutputStreamWriter(new FileOutputStream(file), Charsets.UTF_8); try { writer.write(data); } finally {