Na verdade a idéia é serializar um objeto java no formato XML, e um objeto que combina perfeitamente com essa idéia de guardar as configurações são as classes que implementam java.util.Map, porque podemos guardar uma valor associado com uma java ou seja o nome da configuração como chave para ser acessado futuramente e o valor da configuração.
O exemplo é bem simples:
import java.beans.XMLDecoder;
import java.beans.XMLEncoder;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.HashMap;
import java.util.Map;
public class Configuration {
private final String fileName = "config.xml";
private Map
public Configuration() {
loadConfigurations();
}
private void loadConfigurations() {
try {
XMLDecoder decoder = new XMLDecoder( new FileInputStream(fileName) );
configurations = (Map
decoder.close();
} catch (FileNotFoundException ex) {
configurations = new HashMap
}
}
public boolean addConfiguration(String configName, Object value) {
configurations.put(configName, value);
try {
XMLEncoder encoder = new XMLEncoder( new FileOutputStream(fileName) );
encoder.writeObject(configurations);
encoder.flush();
encoder.close();
return true;
} catch (FileNotFoundException ex) {
return false;
}
}
public Object getConfiguration(String configName) {
Object config = configurations.get(configName);
if(config == null)
return "";
else
return config;
}
}
Analisando o código:
No construtor da classe é chamado o metodo loadConfigurations, esse metodo irá ler o conteudo do arquivo xml e passar para o objeto do tipo map (aonde ficaram as configurações):
private void loadConfigurations() {
try {
XMLDecoder decoder = new XMLDecoder( new FileInputStream(fileName) );
configurations = (Map
decoder.close();
} catch (FileNotFoundException ex) {
configurations = new HashMap
}
}
Instanciado o nosso objeto podemos então adicionar e recuperar valores da configuração, para adicionar uma nova configuração é utilizado o metodo addConfiguration() com o nome da configuração e o objeto que corresponde ao seu valor:
public boolean addConfiguration(String configName, Object value) {
configurations.put(configName, value);
try {
XMLEncoder encoder = new XMLEncoder( new FileOutputStream(fileName) );
encoder.writeObject(configurations);
encoder.flush();
encoder.close();
return true;
} catch (FileNotFoundException ex) {
return false;
}
}
O metodo para recuperar o valor de uma configuração de acordo com o seu nome:
public Object getConfiguration(String configName) {
Object config = configurations.get(configName);
if(config == null)
return "";
else
return config;
}
Para testar:
public static void main(String args[]) {
Configuration config = new Configuration();
//setando
config.addConfiguration("title", "Hello Configuration");
config.addConfiguration("reload_after", 50);
//recuperando
String title = (String) config.getConfiguration("title");
Integer reload = (Integer) config.getConfiguration("reload_after");
System.out.println("Config title: " + title);
System.out.println("Config reload:" + reload);
}
Pronto de uma maneira padronizada, rapida e facil para guardar suas preferências do sistema em Java.
Espero que gostem!!!
Até a proxíma.

