Java言語からプロパティファイルを扱う2つ目のAPIは、java.util.ResourceBundleクラスです。このクラスは以前の記事の「プロパティファイルを使った国際化」でも紹介していますね。java.util.Propertiesクラスとは異なり、java.util.ResourceBundleクラスでは国際化対応をするための機能が備わっています。
java.util.ResourceBundleクラスを利用したプロパティファイルの読み込みは下記のようになります。悩ましいことに、先に紹介したjava.util.Propertiesクラスとはプログラミングの仕方が異なります。
ResourceBundleSampleクラスのソースコード | |
|
|
ここで、ResourceBundleクラスがプロパティファイルの内容を読み込みます。「.properties」というファイル拡張子の部分が不要であるという点に注目してください。
|
この個所で、mykeyというキーに対応した値を取り出します。
ResourceBundle.getBundleメソッドは、クラスパス上からプロパティファイルを読み込もうとします。そのため、sampleprop.propertiesファイルはクラスパス上に配置してください。
ここでは、ソースフォルダに配置することによりクラスパス上に配置されたことと同じ状況を作り出しています。
さらに悩ましいことに、ResourceBundleクラスのメソッドのいくつかはjava.util.MissingResourceException例外を発生させます。この例外クラスは、java.lang.RuntimeExceptionを継承したクラスであるという点に注意を払う必要があります。RuntimeExceptionを継承した例外クラスは例外処理を思わず忘れてしまいがちだからです。
ここでも、参考までにいくつかの正常系ではない動作についてお伝えします。まず、プロパティファイルを読み込めなかった場合の例外には、下記のような例外が発生します。
|
クラスパス上にsampleprop.propertiesやsampleprop_ja.propertiesが見つからない場合に、この例外が発生します。
また、存在しないキーによる読み込みを試みると、下記のような例外が発生します。
|
どのような場合に例外が発生するのかについても、Propertiesクラスとは異なる点が多いので注意してください。
今回は、プロパティファイルやそれを扱うプログラミングを紹介してきました。どういうものかお分かりいただけましたでしょうか。
冒頭で紹介したように、プロパティに関するプログラミングは外部ファイルと関係が出てくる技術であるため、初心者にとっては少し難易度の高いものとなります。クラスパスに関する話題が出てくると、さらに難しいものになってしまいますね。
一方で、ソースコードからそれら固有の設定情報やメッセージなどを追い出すことができるメリットはかなり大きいです。ぜひ、プロパティファイルを扱う技術を身に付けて、活用できるようになっていきましょう!
blanco Framework(コミッタ)
伊賀 敏樹(いが としき)
ハンドル:いがぴょん
1968年生まれ。現在、NTTデータ ビジネスブレインズ 第一SI事業部 ソリューショングループ所属。システム開発の技術支援などに従事する。仕事におけるJava言語とのかかわりは1998年から。 現在 blanco Frameworkというオープンソースによるソースコード自動生成タイプの開発フレームワーク提供に取り組んでいる。 趣味はヴァイオリン演奏。アマチュアオーケストラで演奏することもある。
ホームページ
いがぴょんの日記ウェブページv2(1996年から続けているWeb日記)
主な著書
「やさしく学ぶ基礎からのJDBC」
「Javaプログラミング[アプリケーション編]ステップアップラーニング」
Copyright © ITmedia, Inc. All Rights Reserved.