Files
CodeChickenCore/src/codechicken/lib/config/ConfigFile.java
T
2014-04-28 19:40:13 +10:00

112 lines
2.7 KiB
Java

package codechicken.lib.config;
import java.io.*;
public class ConfigFile extends ConfigTagParent
{
public static final byte[] crlf = new byte[]{0xD, 0xA};
public File file;
private boolean loading;
public ConfigFile(File file) {
newlinemode = 2;
load(file);
}
protected ConfigFile() {}
protected void load(File file) {
try {
if(!file.getParentFile().exists())
file.getParentFile().mkdirs();
if (!file.exists())
file.createNewFile();
} catch (IOException e) {
throw new RuntimeException(e);
}
this.file = file;
loadConfig();
}
protected void loadConfig() {
loading = true;
BufferedReader reader;
try {
reader = new BufferedReader(new FileReader(file));
while (true) {
reader.mark(2000);
String line = reader.readLine();
if (line != null && line.startsWith("#")) {
if (comment == null || comment.equals(""))
comment = line.substring(1);
else
comment = comment + "\n" + line.substring(1);
} else {
reader.reset();
break;
}
}
loadChildren(reader);
reader.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
loading = false;
}
@Override
public ConfigFile setComment(String header) {
super.setComment(header);
return this;
}
@Override
public ConfigFile setSortMode(int mode) {
super.setSortMode(mode);
return this;
}
@Override
public String getNameQualifier() {
return "";
}
public static String readLine(BufferedReader reader) throws IOException {
String line = reader.readLine();
return line == null ? null : line.replace("\t", "");
}
public static void writeLine(PrintWriter writer, String line, int tabs) {
for (int i = 0; i < tabs; i++)
writer.print('\t');
writer.println(line);
}
public void saveConfig() {
if (loading)
return;
PrintWriter writer;
try {
writer = new PrintWriter(file);
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
}
writeComment(writer, 0);
ConfigFile.writeLine(writer, "", 0);
saveTagTree(writer, 0, "");
writer.flush();
writer.close();
}
public boolean isLoading() {
return loading;
}
}