Files
CodeChickenCore/codechicken/lib/config/SimpleProperties.java
T
2013-07-16 17:58:02 +10:00

151 lines
3.7 KiB
Java

package codechicken.lib.config;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.nio.charset.Charset;
import java.util.HashMap;
import java.util.Map.Entry;
public class SimpleProperties
{
public HashMap<String, String> propertyMap = new HashMap<String, String>();
public File propertyFile;
public boolean saveOnChange = false;
public String encoding;
private boolean loading = false;
public SimpleProperties(File file, boolean saveOnChange, String encoding)
{
propertyFile = file;
this.saveOnChange = saveOnChange;
this.encoding = encoding;
}
public SimpleProperties(File file, boolean saveOnChange)
{
this(file, saveOnChange, Charset.defaultCharset().name());
}
public SimpleProperties(File file)
{
this(file, true);
}
public void load()
{
clear();
loading = true;
try
{
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(propertyFile), encoding));
while(true)
{
String read = reader.readLine();
if(read == null)
break;
int equalIndex = read.indexOf('=');
if(equalIndex == -1)
continue;
setProperty(read.substring(0, equalIndex), read.substring(equalIndex+1));
}
reader.close();
}
catch(Exception e)
{
throw new RuntimeException(e);
}
loading = false;
}
public void save()
{
try
{
PrintStream writer = new PrintStream(propertyFile);
for(Entry<String, String> entry : propertyMap.entrySet())
{
writer.println(entry.getKey()+"="+entry.getValue());
}
writer.close();
}
catch(Exception e)
{
throw new RuntimeException(e);
}
}
public void clear()
{
propertyMap.clear();
}
public boolean hasProperty(String key)
{
return propertyMap.containsKey(key);
}
public void removeProperty(String key)
{
if(propertyMap.remove(key) != null && saveOnChange && !loading)
save();
}
public void setProperty(String key, int value)
{
setProperty(key, Integer.toString(value));
}
public void setProperty(String key, boolean value)
{
setProperty(key, Boolean.toString(value));
}
public void setProperty(String key, String value)
{
propertyMap.put(key, value);
if(saveOnChange && !loading)
save();
}
public int getProperty(String property, int defaultvalue)
{
try {
return Integer.parseInt(getProperty(property, Integer.toString(defaultvalue)));
} catch(NumberFormatException nfe)
{return defaultvalue;}
}
public boolean getProperty(String property, boolean defaultvalue)
{
try {
return Boolean.parseBoolean(getProperty(property, Boolean.toString(defaultvalue)));
} catch(NumberFormatException nfe)
{return defaultvalue;}
}
public String getProperty(String property, String defaultvalue)
{
String value = propertyMap.get(property);
if(value == null)
{
setProperty(property, defaultvalue);
return defaultvalue;
}
return value;
}
public String getProperty(String property)
{
return propertyMap.get(property);
}
}