Java目線でコンパイラの仕組みをのぞいてみよう!
プログラマーの常識をJavaで身につける (9)

コードから情報を追い出せ!
プロパティファイルの常識


株式会社 NTTデータ ビジネスブレインズ
伊賀敏樹
2007/11/29


国際化にも対応、java.util.ResourceBundleクラス

 Java言語からプロパティファイルを扱う2つ目のAPIは、java.util.ResourceBundleクラスです。このクラスは以前の記事の「プロパティファイルを使った国際化」でも紹介していますね。java.util.Propertiesクラスとは異なり、java.util.ResourceBundleクラスでは国際化対応をするための機能が備わっています。

 java.util.ResourceBundleクラスを利用したプロパティファイルの読み込みは下記のようになります。悩ましいことに、先に紹介したjava.util.Propertiesクラスとはプログラミングの仕方が異なります。

図6 java.util.ResourceBundleクラスによるプロパティファイルの読み込み
図6 java.util.ResourceBundleクラスによるプロパティファイルの読み込み

ResourceBundleSampleクラスのソースコード
import java.util.MissingResourceException;
import java.util.ResourceBundle;

public class ResourceBundleSample {
    public static void main(String[] args) {
        ResourceBundle bundle = null;
        try {
            bundle = ResourceBundle.getBundle("sampleprop");
        } catch (MissingResourceException e) {
            e.printStackTrace();
            return;
        }

        String value = null;
        try {
            value = bundle.getString("mykey");
        } catch (MissingResourceException e) {
            e.printStackTrace();
            return;
        }
        System.out.println(value);
    }
}

説明


            bundle = ResourceBundle.getBundle("sampleprop");

 ここで、ResourceBundleクラスがプロパティファイルの内容を読み込みます。「.properties」というファイル拡張子の部分が不要であるという点に注目してください。

            value = bundle.getString("mykey");

 この個所で、mykeyというキーに対応した値を取り出します。

プロパティファイルの配置場所

 ResourceBundle.getBundleメソッドは、クラスパス上からプロパティファイルを読み込もうとします。そのため、sampleprop.propertiesファイルはクラスパス上に配置してください。

図7 クラスパスが通っている場所にプロパティファイルを配置する例(2)
図7 クラスパスが通っている場所にプロパティファイルを配置する例(2)

 ここでは、ソースフォルダに配置することによりクラスパス上に配置されたことと同じ状況を作り出しています。

例外処理に注意!

 さらに悩ましいことに、ResourceBundleクラスのメソッドのいくつかはjava.util.MissingResourceException例外を発生させます。この例外クラスは、java.lang.RuntimeExceptionを継承したクラスであるという点に注意を払う必要があります。RuntimeExceptionを継承した例外クラスは例外処理を思わず忘れてしまいがちだからです。

プロパティファイルが存在しない場合の例外

 ここでも、参考までにいくつかの正常系ではない動作についてお伝えします。まず、プロパティファイルを読み込めなかった場合の例外には、下記のような例外が発生します。

java.util.MissingResourceException: Can't find bundle for base name sampleprop, locale ja_JP
at java.util.ResourceBundle.throwMissingResourceException(Unknown Source)
at java.util.ResourceBundle.getBundleImpl(Unknown Source)
at java.util.ResourceBundle.getBundle(Unknown Source)
at ResourceBundleSample.main(ResourceBundleSample.java:8)

 クラスパス上にsampleprop.propertiesやsampleprop_ja.propertiesが見つからない場合に、この例外が発生します。

存在しないキーを指定した場合の例外

 また、存在しないキーによる読み込みを試みると、下記のような例外が発生します。

java.util.MissingResourceException: Can't find resource for bundle java.util.PropertyResourceBundle, key usokey
at java.util.ResourceBundle.getObject(Unknown Source)
at java.util.ResourceBundle.getString(Unknown Source)
at ResourceBundleSample.main(ResourceBundleSample.java:15)

 どのような場合に例外が発生するのかについても、Propertiesクラスとは異なる点が多いので注意してください。

ソースコードから「情報」を追い出そう!

 今回は、プロパティファイルやそれを扱うプログラミングを紹介してきました。どういうものかお分かりいただけましたでしょうか。

 冒頭で紹介したように、プロパティに関するプログラミングは外部ファイルと関係が出てくる技術であるため、初心者にとっては少し難易度の高いものとなります。クラスパスに関する話題が出てくると、さらに難しいものになってしまいますね。

 一方で、ソースコードからそれら固有の設定情報やメッセージなどを追い出すことができるメリットはかなり大きいです。ぜひ、プロパティファイルを扱う技術を身に付けて、活用できるようになっていきましょう!

@IT関連記事

Javaのクラスライブラリを攻略「ユーティリティ編」
[連載]基礎から学ぶサーブレット/JSP(8) 
国際化機能や配列、正規表現のクラスを学び、実際的なアプリケーション作成のための基礎をつくります

Java Solution」フォーラム 2003/9/9
Validatorプラグインによる妥当性検証の実現(前編)
Strutsを使うWebアプリケーション構築術(5) Struts 1.1からの新機能であるValidatorプラグインを用いて、入力データの妥当性を検証する機能を実装してみよう
Java Solution」フォーラム 2004/5/28

1-2-3


 Index
第9回 コードから情報を追い出せ! プロパティファイルの常識
  Page1
「プロパティファイル」ってどんなもの?
プロパティファイルは何を目的としているのか?
プロパティにISO 8859_1以外の文字コードを使うには?
  Page2
プロパティ操作の基本、java.util.Propertiesクラス
  Page3
国際化にも対応、java.util.ResourceBundleクラス
ソースコードから「情報」を追い出そう!


プロフィール
伊賀 敏樹(いが としき)
ハンドル:いがぴょん

1968年生まれ。現在、NTTデータ ビジネスブレインズ 第一SI事業部 ソリューショングループ所属。システム開発の技術支援などに従事する。仕事におけるJava言語とのかかわりは1998年から。 現在 blanco Frameworkというオープンソースによるソースコード自動生成タイプの開発フレームワーク提供に取り組んでいる。 趣味はヴァイオリン演奏。アマチュアオーケストラで演奏することもある。

ホームページ
いがぴょんの日記ウェブページv2(1996年から続けているWeb日記)

所属団体
blanco Framework(コミッタ)

主な著書
やさしく学ぶ基礎からのJDBC
Javaプログラミング[アプリケーション編]ステップアップラーニング





ご意見、ご感想はJava Solution 会議室へどうぞ



Java Solution全記事一覧



TechTargetジャパン

Java Solution フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH