end0tknr's kipple - 新web写経開発

http://d.hatena.ne.jp/end0tknr/ から移転しました

apache commons configuration for java で INI file を load / read

http://commons.apache.org/proper/commons-configuration/

ini形式の設定ファイルをloadする必要があったので、探したら、見かけた。

※ini以外にも、 .xmlや .properties 等に対応しているようです。 ( 一方で、.json や、.yaml には対応していません )

package jp.end0tknr;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.Iterator;
import org.apache.commons.configuration2.Configuration;
import org.apache.commons.configuration2.INIConfiguration;
import org.apache.commons.configuration2.ex.ConfigurationException;

public class TestApacheCommonsConfiguration {

    public TestApacheCommonsConfiguration() {}

    public static void main(String[] args) {
        String confFilePath = "resource/test.ini";
        String encoding = "SJIS";
        
        File file = new File(confFilePath);
        FileInputStream input;
        InputStreamReader stream;
        try {
            input = new FileInputStream(file);
            stream = new InputStreamReader(input,encoding);
        } catch (FileNotFoundException | UnsupportedEncodingException e) {
            System.out.println(e.getClass().getName()+ 
                    " fail open file "+ confFilePath);
            return;
        }
        
        INIConfiguration configTmp = new INIConfiguration();
        try {
            configTmp.read( new BufferedReader(stream) );
        } catch (ConfigurationException | IOException e) {
            System.out.println(e.getClass().getName()+" fail read file ");
            return;
        }
        
        Configuration config = configTmp;
        Iterator<String> atriKeys = config.getKeys();
        while(atriKeys.hasNext()) {
            String atriKey = (String)atriKeys.next();
            
            if(! config.containsKey(atriKey) ){
                System.out.println( "not exist key "+ atriKey);
            }
            System.out.println( atriKey+ "="+ config.getString(atriKey) );
        }
    }
}
; Test ini file to be included by a configuration definition
[common]
sysTitle = これは、テスト用のタイトルです
[testini]
loaded=yes

↑こう書くと、↓こう表示されます

common.sysTitle=これは、テスト用のタイトルです
testini.loaded=yes

その他 - 参照したjar

  • commons-configuration2-2.1.1.jar
  • commons-logging-1.2.jar
  • commons-beanutils-1.9.2.jar
  • commons-lang3-3.5.jar