25 czerwca 2011 blog java

Sekcje w plikach .properties w javie

Klasa Properties w javie dziedziczy z HashMap. Do obsłużenia sekcji w plikach konfiguracyjnych, wystarczy dopisanie kilku linijek do metody dodającej elementy do mapy. W poniższym przykładzie nazwy sekcji są doklejane na początku nazwy klucza, łącznie z kropką. Po odczytaniu konfiguracji, należy zresetować znacznik sekcji. Dzięki temu sekcje nie będą doklejane do kluczy później dodawanych elementów. Bezpośredni link do klasy PropertiesWithSections.

package pl.devsite.configuration;

import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.util.Properties;

/**
 * Handles sections in properties java files.
 * @author dmn
 */
public class PropertiesWithSections extends Properties {

    private String currentSection = null;

    public PropertiesWithSections(Properties defaults) {
       super(defaults);
    }

    public PropertiesWithSections() {
    }

    public void resetCurrentSection() {
       currentSection = null;
    }

    @Override
    public synchronized void load(Reader reader) throws IOException {
       super.load(reader);
       resetCurrentSection();
    }

    @Override
    public synchronized void load(InputStream inStream) throws IOException {
       super.load(inStream);
       resetCurrentSection();
    }

    @Override
    public synchronized Object put(Object key, Object value) {
       String sKey = key.toString();
       if (sKey.startsWith("[") && sKey.endsWith("]")) {
         sKey = sKey.substring(1, sKey.length() - 1);
         if ("ROOT".equals(sKey.toUpperCase())) {
          currentSection = null;
         } else {
          currentSection = sKey;
         }
         return null;
       }
       return super.put((currentSection == null ? "" : currentSection + ".") + key, value);
    }
}