プロパティファイルから値を取得する!


DBの接続設定を~.properties ファイルに書いたりします。
プロパティファイルから値を取得するクラスです。
シングルトンにしてあるのでちょっとだけいい感じかも?
個人的には設定は xml に書いた方が好き。
プロパティファイルは native2ascii とかしなきゃいけないからメンドイ。
プロパティファイルにこだわる人もいるけど、個人的にはどーでもいい。



import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Properties;

/**
* プロパティファイル関連クラス
*/
public class AppProperties extends Properties {

/** serialVersionUID */
private static final long serialVersionUID = 1L;

/** プロパティファイル名 */
private static final String PROPERTY_FILENAME = "application.properties";

/** instance */
private static AppProperties instance = null;

/**
* インスタンス取得メソッド
*
* @return インスタンス
* @throws IOException プロパティファイルI/O例外
*/
public static synchronized AppProperties getInstance()
throws IOException {

if (instance == null) {

instance = new AppProperties();
}

return instance;
}

/**
* コンストラクタ
*
* @throws IOException プロパティファイルI/O例外
*/
@SuppressWarnings("unchecked")
private AppProperties() throws IOException {

try {

load(new FileInputStream(getFilePath()));

// URL での取得が失敗した場合、
// 実行時パスでの取得を試みます。
} catch (NullPointerException e) {

load(new FileInputStream(PROPERTY_FILENAME));

} catch (FileNotFoundException e) {

load(new FileInputStream(PROPERTY_FILENAME));
}
}

/**
* URL を含んだフォーマットでプロパティファイルの URL を取得します。

* Web アプリケーションでは URL でプロパティファイルを指定します。
*
* @return プロパティファイルの URL
*/
private String getFilePath() {

URL url = Thread.currentThread().getContextClassLoader()
.getResource(PROPERTY_FILENAME);

return url.getFile();
}

/**
* キーに対応するデータを取得します。

*

* test1=data1

* test2=data2

*

* ↑のようにプロパティファイルに設定されている場合、key に「test」を渡して下さい。

* String[] に{"data1","data2"}として返します。

* ※test=data という設定は本メソッドでは取得できません。

* getProperty を使用して下さい。

*

* また、該当するキーが存在しない場合には null をかえします。
*
* @param key キー
*
* @return データ
*/
public String[] getProperties(String key) {

ArrayList datalist = new ArrayList();
for (int cnt = 0;; cnt++) {

String data = getProperty(key + Integer.toString(cnt + 1));
if (!StringUtils.isEmpty(data)) {

datalist.add(data);

} else {

break;
}
}

if (datalist.size() == 0) {

return null;
}

return (String[]) datalist.toArray(new String[datalist.size()]);
}
}

0 コメント: