Javaでは、お手軽に外部ファイルを利用する場合、「java.util.ResourceBundle」クラスをよく使います。
これを使うと簡単に設定とか定義とかを外部ファイルに定義しておけます。
Windowsアプリを開発していた方は、INIファイル相当だと思っておけばOKです。
サンプル
hoge.propertiesに定義した色から果物に変換する定義を取得。取得した果物を標準出力してみます。
ResouceBundleTest.java
1 2 3 4 5 6 7 8 9 | import java.util.ResourceBundle; public class ResouceBundleTest { public static void main(String[] args) { ResourceBundle rb = ResourceBundle.getBundle("hoge"); //読み込む定義ファイル名を指定する System.out.println("yellow:"+rb.getString("yellow")); //yellowを取得する→バナナ System.out.println("green:"+rb.getString("green")); //greenを取得する→メロン System.out.println("red:"+rb.getString("red")); //redを取得する→りんご } } |
hoge.properties
1 2 3 | yellow=バナナ green=メロン red=りんご |
実行結果
1 2 3 | yellow:バナナ green:メロン red:りんご |
propertiesファイルの書き方
基本的な書き方
基本的な書き方は、こんな感じです。
1 | キー=値 |
これをいくつでも書けます。
コメント
コメントを書くときは、行の先頭に「#」をつけます。
1 | #キー=値 |
ちなみに、行の先頭に「!」をつけても構いませんが、何となく今まで多かったのは「#」派でした。
両方使うと見栄えが悪いので、どちらか1つに統一して使いましょう。
マルチバイト(日本語)を含むpropertiesファイル
なにげなくサンプルでは、日本語を外部ファイルにさらさら書いてますが、これをこのまま使うことはできない場合があります。
何がダメかというと、変な文字が表示されます。俗に言う、「文字化け」する場合があるのです。
これを解消するためには、原則では「native2ascii」コマンドを利用して、ASCII文字に変換したpropertiesファイルを用意することです。
ただし、先に書いたように、必ずしもASCII変換する必要はなく、最近のJavaでは、そのままでもちゃんと読んでくれます。
この件に限りませんが、そもそもJavaのバージョンを上げられるのであれば、上げた方が良いです。
いろいろあって、簡単にバージョンを上げられない方は、変換しましょう。
おまけ
ふつうは、propertiesファイルから値を取得するたびに、このクラスを呼び出すことはしません。
そこまで大量に書く人もいないでしょうし、LRUとかやる必要はないと思いますが、何らかキャッシュしておくべきです。