
プログラマーの常識をJavaで身につける (9)
コードから情報を追い出せ!
プロパティファイルの常識
株式会社 NTTデータ ビジネスブレインズ
伊賀敏樹
2007/11/29
本連載は、Java言語やその文法は一通り理解しているが、「プログラマー」としては初心者、という方を対象とします。Javaコアパッケージを掘り下げることにより「プログラマーの常識」を身に付けられるように話を進めていきます(編集部注:Java言語の基礎を学びたい読者は、連載「Eclipseではじめるプログラミング」や連載「いまから始めるJava」をご参照ください)。
| 今回の主な内容 ・ 「プロパティファイル」ってどんなもの? ・ プロパティファイルは何を目的としているのか? ・ プロパティにISO 8859_1以外の文字コードを使うには? ・ プロパティ操作の基本、java.util.Propertiesクラス ・ 国際化にも対応、java.util.ResourceBundleクラス ・ ソースコードから「情報」を追い出そう! |
今回は「プロパティファイル」の常識について、Java言語を通じて学んでいきます。
多くの場合、プロパティはプロパティファイルという物理的なファイルと関連付けられて私たちの前に現れます。プログラミング言語内では完結せずに外部の物理ファイルとのかかわりが強く出てくる話題であるため、初心者のうちはなかなかなじみにくい技術かもしれません。しかし、プログラミングにおいて重要ですので、しっかり習得してしまいましょう。
「プロパティファイル」ってどんなもの?
私たちがJava関連のソフトウェアを扱っていると、ファイルの拡張子が「.properties」となっているファイルを見掛けたり、あるいはその内容を編集することがあります。この「.properties」拡張子のテキストファイルが、プロパティファイルです(違う拡張子を付ける場合もありますが)。
テキストエディタなどを利用してプロパティファイルの中身を見てみると、下記のような内容が複数行にわたって記載されています。
|
このように、プロパティファイルには、1行ずつ<キー>=<値>の形式で記載していくことで、おのおののキーに対応した値を設定できるようになっています。そして、設定した値はプログラムから読み込むことができるようになっています。
■ プロパティファイルの文字エンコーディングはISO 8859_1
なお、残念なことに、Javaにおけるプロパティファイルの文字エンコーディングはISO 8859_1です。プロパティファイルについて、詳しくはJava APIリファレンスを参照してください。
あなたが基本的に日本語を扱う立場であれば、利用できる文字コードはISO/IEC 646(通称、ASCIIコード)の範囲に限定されているものと考えて差し支えないでしょう(これを克服するための方法については後述します)。
編集部注:文字コード・文字エンコーディングについて詳しく知りたい読者は第6回記事をご参照ください。
■ INIファイルやレジストリもプロパティファイルの類似品
プロパティファイルに類似したものとして、Microsoft Windowsではファイル拡張子が「.ini」であるINIファイルやレジストリなどといったものが挙げられます。これらも外部で設定した値をプログラムに与えるための仕組みの1つなのです。
プロパティファイルは何を目的としているのか?
それでは次に、プロパティファイルは一体どのような目的で利用されているのか見ていきましょう。
■ 「情報」をソースコードから追い出す
プロパティファイルを用いると、各種「情報」をソースコード上からプロパティファイルへと追い出すことができます。情報をソースコードから追い出すことには、いくつかのメリットがあります。例えば、プロパティファイル上の内容を変更するだけで、ソースコードの再コンパイルなしに設定内容の変更をプログラムの動作に反映させることができます。
このため、現実的にはソースコードから外部に追い出しておきたい情報こそが、プロパティファイルに格納されるべき内容の候補となります。特によく利用されるものは、下記のものです(それ以外にもいろいろありますけれどもね……)。
![]() |
| 図1 プロパティファイルを用いて各種情報を外に出す |
■ 「情報」を追い出す メリット:その1
例えば、動作環境に関する設定内容や利用者ごとの設定内容といったものは、ソフトウェアを開発している時点では、まだ決まっていません。あるいは、同じプログラムを異なった環境で動作させる必要もあるでしょう。
コンパイルされてjarファイル化されて、そして利用者の手に渡った後で、初めて設定内容が決定されるという場面を想像してください。このような場合に、プロパティファイルの設定内容によって、環境依存あるいは利用者依存の内容をプログラムに伝えて動作させることのメリットが出てくるのです。
■ 「情報」を追い出す メリット:その2
また、メッセージ文字列や画面のメニューなどの文字列についても、ソースコードから追い出しておくと便利な場合があります。ソースコードを書く人と、メッセージ文字列やメニューなどの文字列の内容を決定したり変更したりする人が異なる場合に、ソースコードからそれらの情報が追い出されているとメリットが出る場合が多いのです。
■ 「情報」を追い出す メリット:その3
さらに、それら文字列をプロパティファイル化しておくことによって、国際化プログラミング対応が実施しやすくなるという、副作用としてのメリットが得られます。
編集部注:国際化プログラミングについて詳しく知りたい読者は第5回記事をご参照ください。
このように、プロパティファイルを活用すると、ソースコードを変えることなく、あるいは再コンパイルすることなく、プログラムの動作を変えることができるため、比較的多くの場面で利用される技術の1つとなっているのです。
■ 「情報」はXMLファイルやデータベースにも追い出せる
なお、ソースコード上から情報を追い出す方法は、プロパティファイルを利用する以外に、XMLファイルやデータベースを利用するといった方法もあります。それぞれの方法には長所と短所があるため、実際には用途によって使い分けることが多くなります。
プロパティにISO 8859_1以外の文字コードを使うには?
先ほど、Javaにおいてプロパティファイルの文字エンコーディングはISO 8859_1とお伝えしましたが、それ以外にもプロパティファイル固有の記入ルールが定められています。詳しくは、Java APIリファレンスを参照してください。
このような事情のため、単純には日本語を扱うことができません。日本語などISO 8859_1文字コード以外の文字を利用するためには、JDKにもコマンドで付属しているnative2asciiの処理を実施する必要があります。この処理を行うことにより、日本語などの文字をISO8859_1文字コードの範囲に収めることができます。
■ native2ascii処理をする方法もイロイロある
native2ascii処理には、いくつもの方法が提供されています。その中の数個を紹介します。
- Java:native2ascii:ネイティブ - ASCII コンバータ
- Antタスク:native2Ascii
- Eclipseプラグインをダウンロードしてきて利用する
これ以外にも、さまざまな方法が提供されています。いずれか利用しやすい良い方法を選択して、プロパティファイルに日本語を含めることができるようにします。
さて次ページからは、Java言語からプロパティファイルを扱う方法を見てみます。Java言語からプロパティファイルを扱う方法は、歴史的な背景などのために2つのAPIが提供されています。
| Index | ||||||||
|
||||||||
| Java Solution全記事一覧 |
TechTargetジャパン
- EclipseでScalaプログラミングを始めるための基礎 (2012/2/10)
概要や5つの特徴を紹介し、開発環境を構築して対話型実行環境「REPL」やEclipse上でHello Worldを実行します - 並列分散処理の常識をHadoopファミリから学ぶ (2012/2/8)
並列分散処理の課題やHadoopの長所/短所、そして短所を補うHadoop関連プロジェクトの構成や概要などを簡単に紹介 - WebLogicサーバ最新版「12c」の気になる4つの特徴 (2012/1/31)
久々にメジャーアップグレードしたJavaアプリケーションサーバについて、製品担当者に軽量インストーラなどの特徴を聞いた - GitHubをもっとソーシャルに使いこなすための7つ道具 (2012/1/23)
ソースコードホスティングのGitHub周辺で便利な新サービスが続々登場しているので、まとめて紹介しよう。特に連動クラウド「fluxflex」が注目だ
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -

