Hola comunidad, como se la están pasando yo ando en Puebla, Puebla por trabajo pero le comparto estas dos clases que he programado, una para leer y escribir archivos de propiedades (*.properties) y la otra es una clase que extiende a java.util.Properties pero con la diferencia que esta realiza el remplazo de propiedades anidadas, pero primero con la clase para leer y escribir.

com.sergenis.util.PropertiesIO
Esta clase es para leer y escribir archivos de propiedades, todos sus métodos son estáticos por lo que no se necesita crear un objeto de esta para utilizarlos.
Primero el método para leer
PropertiesIO.read(java.io.File);
PropertiesIO.read(java.util.URL);


Como es un archivo abriremos un flujo de entrada para leer su contenido.
InputStream is = url.openStream();

Después creamos el objeto de Properties y se leen las propiedades desde el flujo de entrada.
Properties props = new Properties();
props.load(is);


Para terminar cerramos al flujo de entrada y retornamos las propiedades obtenidas.
is.close();
return props;


CODIGO: PropertiesIO.read();
public static Properties read(java.net.URL url)
    throws IOException {
    InputStream is = url.openStream();
    Properties props = new Properties();
    props.load(is);
    is.close();
    return props;
}
public static Properties read(java.io.File file)
    throws FileNotFoundException, IOException {
    return read(file.toURI().toURL());
}


Notar que el método lanza una IOException esto es porque al abrir el flujo de entrada o al leer las propiedades puede suceder una excepción. También puede ocurrir una IllegalArgumentException cuando el formato de las propiedades es incorecto.
El método que recibe un objeto de tipo java.io.File llama al mismo método pero que recibe una java.net.URL pero primero convirtiéndolo en este tipo.

Ahora el método para guardar las propiedades en un archivo
PropertiesIO.write(java.util.Properties, java.io.File);
PropertiesIO.write(java.util.Properties, java.io.File, String);


En este caso se abrirá un flujo de salida para un archivo.
FileOutputStream ops = new FileOutputStream(file, false);

El parámetro false es para que el flujo remplace el contenido del archivo, si fuese true se escribiría al final de este, es decir, iniciando en la última línea sin remplazar las propiedades que ya existan.


Y para terminar se llama al método store(OutPutStream, String) de Properties para guardar las propiedades y se termina cerrando el flujo de salida.
props.store(ops, comments);
ops.close();


CODIGO: PropertiesIO.write();
public static void write(Properties props, File file)
    throws FileNotFoundException, IOException {
    write(props, file, null);
}

public static void write(Properties props, File file, String comments)
    throws FileNotFoundException, IOException {
    FileOutputStream ops = new FileOutputStream(file, false);
    props.store(ops, comments);
    ops.close();
}


Como nota menciono que los comentarios se escriben al principio del archivo.
#Sun Jun 03 16:22:45 CDT 2012 (Esta línea la pone automaticamete)
# Este es un comentario enviado por mi.
creation=1338758565032
creator=SerGenis



[Aporte] Leer y escribir Properties en Java
Clase programada por mi. La clase la encuentras en:
https://code.google.com/p/com-sergenis/source/browse/trunk/src/main/java/com/sergenis/util/PropertiesIO.java