連載
» 2007年11月29日 00時00分 公開

プログラマーの常識をJavaで身につける(9):コードから情報を追い出せ!プロパティファイルの常識 (3/3)

[伊賀敏樹,株式会社 NTTデータ ビジネスブレインズ]
前のページへ 1|2|3       

国際化にも対応、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クラスとは異なる点が多いので注意してください。

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

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

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

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

筆者紹介

blanco Framework(コミッタ)

伊賀 敏樹(いが としき)
ハンドル:いがぴょん

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

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

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



前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。