2012-06-27 10 views

Odpowiedz

12

Wbudowana klasa właściwości Java nie spełnia oczekiwań.

Ale są też inne biblioteki. Commons Configuration to taki, którego użyłem z pewnym powodzeniem. Klasa PropertiesConfiguration spełnia dokładnie to, czego szukasz.

Więc może masz plik o nazwie my.properties, który wygląda tak:

key1=value1 
key2=Something and ${key1} 

kod, który używa tego pliku może wyglądać następująco:

CompositeConfiguration config = new CompositeConfiguration(); 
config.addConfiguration(new SystemConfiguration()); 
config.addConfiguration(new PropertiesConfiguration("my.properties")); 

String myValue = config.getString("key2"); 

myValue będzie "Something and value1".

0

Po zdefiniowaniu wartości klucza w pliku właściwości, zostanie on przeanalizowany jako wartość literalna. Więc kiedy zdefiniujesz key3= ${key1}, key3 będzie miało wartość "$ {key1}".

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Properties.html#load(java.io.InputStream)

zgadzam się z CSD, zwykły plik konfiguracyjny nie może być Twoim wyborem. Wolę za pomocą Apache Ant (http://ant.apache.org/), gdzie można zrobić coś takiego:

<property name="src.dir" value="src"/> 
<property name="conf.dir" value="conf" /> 

Później, gdy chcesz użyć klucza „src.dir”, po prostu nazwać to coś takiego:

<dirset dir="${src.dir}"/> 

Inną zaletą korzystania z Apache Ant jest możliwość załadowania pliku .properties do pliku kompilacji Ant. Wystarczy zaimportować go w ten sposób:

<loadproperties srcFile="file.properties"/> 
0

.xmlNawet lepiej: skorzystaj z najnowszego Maven. Możesz zrobić kilka fajnych rzeczy z mavenem. W takim przypadku możesz utworzyć plik .properties z tymi liniami:

key1 = ${src1.dir} 
key2 = ${src1.dir}/${filename} 
key3 = ${project.basedir} 

w pom.plik xml (umieszczony w katalogu głównym projektu) należy zrobić coś takiego:

<resources> 
    <resource> 
     <filtering>true</filtering> 
     <directory>just-path-to-the-properties-file-without-it</directory> 
     <includes> 
      <include>file-name-to-be-filtered</include> 
     </includes> 
    </resource> 
</resources> 

... 

<properties> 
    <src1.dir>/home/root</src1.dir> 
    <filename>some-file-name</filename> 
</properties> 

W ten sposób można byłoby wartości klucze zmieniło się w czasie kompilacji, co oznacza, że ​​po kompilacji trzeba będzie to wartości wewnątrz właściwościach plik:

key1 = /home/root 
key2 = /home/root/some-file-name 
key3 = the-path-to-your-project 

skompilować z tej linii, gdy jesteś w tym samym katalogu co plik pom.xml: mvn czystej instalacji -DskipTests