java.util.Properties クラスは、キーワード(String)とそれに対応する値(String)をハッシュテーブルで管理し、その設定,取得を提供するクラスです。
また、キーワード=値 形式のファイルとの間の入出力機能も備えています。
基本的な使い方は以下の通りです。
void foo() throws Exception
{
try {
Properties myConf = new Properties();
FileInputStream myConfFileIn = new FileInputStream("my.conf");
myConf.load(myConfFileIn); ← @ ファイルから読み込む。
String value = myConf.getProperty("KEYWORD"); ← A キーワード "KEYWORD" の定義値を取得する。
myConf.setProperty("KEYWORD", "NEWVALUE"); ← B キーワード "KEYWORD" の定義値を変更する。
FileOutputStream myConfFileOut = new FileOutputStream("my.conf");
myConf.store(myConfFileOut); ← C 変更した内容をファイルに書き込む。
} catch (Exception e) {
throw e;
}
}
void foo() throws Exception
{
try {
// システム・デフォルト・ファイルが読めなかった時のために
// プログラム固定値を設定しておく。
Properties progDefaults = new Properties();
progDefaults.setProperty("A", "ProgramDafaultA");
progDefaults.setProperty("B", "ProgramDafaultB");
progDefaults.setProperty("C", "ProgramDafaultC");
// システム・デフォルト・ファイルから定義を読み込む。
Properties sysDefaults = new Properties(progDefaults); ← @ プログラム固定値をデフォルト値としてオブジェクトを作成。
try {
FileInputStream sysConfFileIn = new FileInputStream("sys.conf");
sysDefaults.load(myConfFileIn); ← A 定義ないものはデフォルト値(システム固定値)が残る。
} catch (Exception e) {
System.out.println("System Defaults File Load Error !! Use the Program Defaults.");
}
// ユーザ・カスタマイズ・ファイルから定義を読み込む。
Properties myConf = new Properties(sysDefaults); ← B システム・デフォルトをデフォルト値としてオブジェクトを作成。
try {
FileInputStream myConfFileIn = new FileInputStream("my.conf");
myConf.load(myConfFileIn); ← C 定義がないものはデフォルト値(システム・デフォルト)が残る。
} catch (FileNotFoundException e) {
;
} catch (Exception e) {
System.out.println("User Configuration File Load Error !! Ignore the User Customize.");
}
myConf.setProperty("KEYWORD", "NEWVALUE"); ← D キーワード "KEYWORD" の定義値を変更(ユーザ単位のカスタマイズ)する。
FileOutputStream myConfFileOut = new FileOutputStream("my.conf");
myConf.store(myConfFileOut); ← E 変更した内容をファイルに書き込む。
} catch (Exception e) {
throw e;
}
}
定義ファイルの配置場所については、環境変数で指定することが多くあります。
Java にも getenv() というメソッドがあり環境変数を使用することはできますが、Java では環境変数は使用しないことが推奨されています。
これは、環境変数というのは特定の処理系の固有の機能であり、処理系を選ばないという Java の思想にそぐわないからです。
そこで、定義ファイルの配置場所の取得についてですが、java.lang.System の getProperty() メソッドを使う方法があります。
このメソッドは、いろいろなシステム情報を提供してくれますが、その中で、
String userHome = System.getProperty("user.home");