Manejo de Properties en JAVA

Estimados amigo de JavaMéxico:

Le quiero compartir un código que realice para el manejo de Properties en Java, esto es por la necesidad que surge el tener una conexión mas capacitada para guardar y leer los properties, aunque mi modelo original es a 3 capas les paso la funcionalidad y es pero que sea de ayuda y aporte a toda la comunidad.

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;

public class ConectaProperties{

    /**
     * Metodo que guarda la informacion en un propertie solo darle el nombre no
     * la extension, guarda el propertie y lo sobre escribe
     *
     * @param prop Nombre de la propiedad
     * @param nombre nombre del propertie a llamar
     * @param valor valor asignado al propertie
     */

    public void guardaProperties(String prop, String nombre, String valor) {
        Properties dbProps = new Properties();

        // Declaramos un InputStream para recibir los datos
        InputStream inputStream = null;
        String listo = "";
        URL url = ConectaProperties.class.getResource("/propFormulas.properties");
        String path = url.getPath();
        path = path.substring(1, path.length());
        path = path.replace("%20", " ");
        try {

            //Cargamos el archivo

            inputStream = new FileInputStream(path);
            dbProps.load(inputStream);
            inputStream.close();

            //obtenemos los valores del archivo y los asignamos a las variables
            listo = dbProps.getProperty(nombre);
        } catch (Exception e) {
            System.out.println("El archivo NO ha sido cargado exitosamente");
        }

        dbProps.setProperty(nombre, valor);
        FileOutputStream os = null;

        try {
            os = new FileOutputStream(path);
            dbProps.store(os, null);
        } catch (IOException ioe) {
            ioe.printStackTrace();
        } finally {

            try {
                if (os != null) {
                    os.close();
                }
            } catch (IOException ex) {
                Logger.getLogger(ConectaProperties.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    /**
     * Metodo que lee el valor por medio de un ResourceBundle solo es necesario
     * el nombre sin la extencion este libera el cache
     *
     * @param nombreProp nombre del propertie
     * @return Una coleccion con todos los valores del
     */

    public Map<String, String> leerProperties(String nombreProp) {
        Map<String, String> valores = new TreeMap<String, String>();
        ResourceBundle rb = ResourceBundle.getBundle(nombreProp);

        Enumeration<String> keys = rb.getKeys();
        if (keys != null) {
            while (keys.hasMoreElements()) {
                String key = keys.nextElement();
                valores.put(key, rb.getString(key));
            }
        }
        ResourceBundle.clearCache();
        return valores;
    }
}