コードから情報を追い出せ!プロパティファイルの常識:プログラマーの常識をJavaで身につける(9)(2/3 ページ)
本連載は、Java言語やその文法は一通り理解しているが、「プログラマー」としては初心者、という方を対象とします。Javaコアパッケージを掘り下げることにより「プログラマーの常識」を身に付けられるように話を進めていきます。今回はプロパティファイルについて。もちろん、使ってますよね? ソースコードに設定情報をベタ書きすると、情報を書き換えるたびにコンパイルが必要ですしね。
プロパティ操作の基本、java.util.Propertiesクラス
Java言語からプロパティファイルを扱う1つ目のAPIは、java.util.Propertiesクラスです。クラス名がそのままプロパティファイルを扱うことを示していますね。
プロパティファイルを利用したサンプルを以下に示します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
説明
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
この個所で、Propertiesクラスがプロパティファイルの内容を読み込みます。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
この個所で、mykey というキーに対応した値を取り出します。
前提条件
この記事で挙げるサンプルプログラムは、現実的なプログラムで必要となる粒度の例外処理を実装していません。これは、現実的な例外処理を実装すると、APIの見通しが悪くなってしまうためです。現実的なプログラムで必要となる例外処理の粒度については、以前の記事を参考にしてください。
プロパティファイルの配置場所
このサンプルプログラムでは、カレントディレクトリからプロパティファイルを読み込むよう記述されています。そのため、sampleprop.propertiesファイルはプログラム実行環境にとってカレントディレクトリに配置してください。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
プロパティファイルが存在しない場合の例外
なお参考までに、いくつかの正常系ではない動作についてお伝えします。対象となるプロパティファイルが読み込めなかった場合には、下記のような例外が発生します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
このような例外が発生した場合には、プロパティファイルがプログラム実行環境にとってのカレントディレクトリに配置されていない、あるいは読み込むことができないことを示しています。
存在しないキーを指定した場合の例外
また、下記のように、存在しないキー「usokey」により読み込みを行うと、nullが戻ってきます。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
プロパティファイルの読み込みはファイル入力を伴うものです。このように外部に依存するプログラミングでは、正常系ではない動作を理解しておくことをお勧めします。準備しておけば、異常系などが発生した場合にも対処がしやすくなります。
クラスローダを利用したプロパティファイルのロード
先ほど紹介した例とは異なり、プロパティファイルをクラスパスから読み込みたいという場合もあります。その場合の実装例を示します。
ポイントは、クラスローダを利用してプロパティファイルを取得するように変更されている点です。この例では このクラス自身を読み込む際に利用されたクラスローダを用いてプロパティファイルを探すようにしています。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
Javaのクラスローダに関する話題は、やや難易度の高いものの1つです。初心者の方は分からなくても気にせず読み飛ばして先に進んでください。
ちなみに、これ以外に何通りものクラスローダ取得方法があります。用途などによって使い分ける必要があります。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
このサンプルプログラムでは、クラスパスからプロパティファイルを読み込むような記述がされています。そのため、sampleprop.propertiesファイルはクラスパス上に配置する必要があります。
クラスパスが通っている場所にプロパティファイルを配置する
ここでは、Eclipseのソースフォルダにプロパティファイルを配置することによりクラスパス上に配置されたことと同じ状況を作り出しています。これは、Eclipseのデフォルト状態の挙動なのです。
さらに次ページでは、java.util.ResourceBundleクラスを使ったプロパティファイルの操作方法について見ていきましょう。
Copyright © ITmedia, Inc. All Rights Reserved.