プロパティは、プログラム外部に定義したデータを読み込み、プログラム内で扱う仕組みで、いわゆる設定ファイルを実現するものです。java.util.Propertiesクラスによってその機能が提供されています。
プロパティ・ファイルの形式は、<キー> = <値>というテキスト形式とXML形式の2つがあります。また、テキスト形式については、文字コードがISO 8859-1ラテン文字で記述する方式と、任意の文字コードで記述し読み込み時に指定する方法があります。
ファイル形式 | 文字コード | 日本語の扱い |
---|---|---|
テキスト形式(1) | ISO 8859-1 | ユニコードエスケープ形式で記述 |
テキスト形式(2) | 任意 | 使用する文字コードで記述 |
XML形式 | 任意 | 使用する文字コードで記述 |
ユニコードエスケープ形式に変換するには、JDK付属のnative2asciiコマンドを使用します。主要な統合開発環境(Eclipse, NetBeansなど)は、プロパティ・ファイルを読み書きするときに自動でこの変換を行う機能を持っています。
テキスト形式(1)は、プロパティのキーと値を1行に1つ定義します。記述方法は、キーと値を=で結ぶ形式です。文字コードは、ISO 8859-1でエンコーディングされている必要があり、このエンコーディングで表現できない文字(例えば日本語)は、Unicodeエスケープ表現で記述する必要があります。例を次に示します。
# Comment in English this.is.a.key = hello properties that.is.a.key = good morning # \u65e5\u672c\u8a9e\u3067\u30b3\u30e1\u30f3\u30c8 sample.number = 1283 # \u65e5\u672c\u8a9e\u3067\u5024\u3092\u8a18\u8ff0 sample.message.ja = \u3053\u3093\u306b\u3061\u306f\u3001\u3042\u304b\u3061\u3083\u3093
テキスト形式(2)は、テキスト形式(1)と同じプロパティの定義方法ですが、文字コードを任意なエンコーディングで記述したものです。日本語が表現可能なエンコーディング(UTF-8, SJIS, EUC_JPなど)でプロパティ・ファイルを記述し、使用することができます。例を次に示します。
# Comment in English this.is.a.key = hello properties that.is.a.key = good morning # 日本語でコメント sample.number = 1283 # 日本語で値を記述 sample.message.ja = こんにちは、あかちゃん
XML形式は、DTDで定義されるXMLボキャブラリで、Javadoc APIのjava.util.Propertiesに記載されています。XMLなので、エンコーディングはXML宣言行にencoding属性で記述できるため、日本語もそのまま記述することができます。例を次に示します。
<?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> <properties> <comment>java.util.PropertiesのXML形式設定ファイル</comment> <entry key="this.is.a.key">hello properties</entry> <entry key="that.is.a.key">good morning</entry> <entry key="sample.number">1283</entry> <entry key="sample.message.ja">こんにちは、あかちゃん</entry> </properties>
テキスト形式(1)のプロパティ・ファイルは、文字コードISO 8859-1でエンコーディングされており、java.util.Propertiesクラスのメソッドvoid load(InputStream inStream)で読み込みます。例を次に示します。
private static Properties loadIso8859Properties(String path) throws IOException { Properties prop = new Properties(); prop.load(new FileInputStream(path)); return prop; }
テキスト形式(2)のプロパティ・ファイルは、任意の文字コードでエンコーディングしたもので、エンコーディングに使用した文字コードを指定して読み込み処理を記述します。java.util.Propertiesクラスのメソッドvoid load(Reader reader)で読み込みます。UTF-8を使用した例を次に示します。
private static Properties loadUtf8Properties(String path) throws IOException { Properties prop = new Properties(); prop.load(new InputStreamReader(new FileInputStream(path), "UTF-8")); return prop; }
XML形式のプロパティ・ファイルは、java.util.Propertiesクラスのメソッドvoid loadFromXML(InputStream in)で読み込みます。例を次に示します。
private static Properties loadXmlProperties(String path) throws IOException { Properties prop = new Properties(); prop.loadFromXML(new FileInputStream(path)); return prop; }