6.2. プロパティ
Javaはアプリケーションでプロパティ(属性値・設定値)を容易に扱えるようにするため、「java.util.Properties」クラスを提供しています。このクラスはプロパティの管理をするだけでなく、ストリーム(特にファイルを想定)との入出力をサポートしています。したがってファイルからプロパティ一覧を読み込んだり、逆にファイルへ書き込んだりする事が可能となっています。またPropertiesは「java.util.Hashtable」のサブクラスとなっており、「キー」と「値」の形式でプロパティを管理しています。
以下はファイルから読み込んだプロパティ一覧を利用するサンプルプログラムです。
import java.util.Properties; import java.io.*; ... InputStream input = new FileInputStream("..."); Properties properties = new Properties(); properties.load(input); ... String value = properties.getProperty("key");
「load」メソッドによってファイルにあるプロパティ一覧を読み込んで利用できるのですが、それが記載されたファイルは「フォーマット」と「文字コード」に関する2つのルールに従っていなければなりません。ファイルフォーマットに関するルールは次の通りです。
- 基本的に1行ずつキーと値の組が書かれている。ただし行末が「\」で終了している場合は、次の行も継続行とみなして処理をします。継続行の先頭にある空白文字は全てスキップします。
- キーと値は「=」か「:」で区切られている。キーに空白文字を使用することはできません。区切り文字の前後にある空白文字は全てスキップします。キーの前にある空白文字もスキップします。
- 区切り文字が無い場合、区切り文字の後に何も無い場合には、値がnullであるプロパティが設定されます。
例えば以下のファイルを読み込むと
hokkaido:sapporo miyagi=sendai tokyo
以下のプロパティがPropertiesインスタンスに格納されます。
キー | 値 |
---|---|
hokkaido | sapporo |
miyagi | sendai |
tokyo | (null) |
文字コードに関するルールは、「ASCII文字コードしか使用してはならない」というものです。しかしこれでは日本語の値を持つプロパティを利用できない事になります。実際はそうではなく、そういった場合にはASCII以外の文字をUnicode(「\uXXXX」の形式)に変換すれば良いことになっています。JDKには、それをサポートする「native2ascii」というツールがあります。native2asciiの利用方法は以下の通りです。
$ native2ascii (日本語で書かれたプロパティファイル)
例えば下記のファイルをnative2asciiにかけると
hokkaido:札幌 miyagi:仙台
以下のような出力を得ます。
hokkaido:\u672d\u5e4c miyagi:\u4ed9\u53f0
これをファイルに保存し、そのファイルをPropertiesに読み込ませると、「hokkaido」に対しては「札幌」、「miyagi」に対しては「仙台」という値が得られるようになります。
(実習課題2)
以下のアプリケーションを作成しなさい。
- ロケールで使用されている国コードをキーとし、国名(日本語)を値とするプロパティファイルを作成する事。プロパティは最低10個以上とする事。
- それを読み込み、一覧を表示するアプリケーションを作成する事。