プロパティファイル
日本語 | 属性書類 |
英語 | property file |
ふりがな | ぷろぱてぃふぁいる |
フリガナ | プロパティファイル |
プログラムで使用する各種設定を記述したファイル。
拡張子が.propertiesのファイル。多くの場合、クラスファイル(拡張子が.classのファイル)の置いてあるディレクトリ(通常はbinディレクトリ)に置かれる。
テキストファイルで、各行に「キー=値」の形式で記述し、「キー」を元に「値」を取得することができる。仕組みはHashMapクラスと同じく、「辞書」構造となる。
プロパティファイルを直接指定する場合にはストリームクラスとPropertiesクラスを用いて取得する。また、リソースバンドルを用いて取得することもできる。リソースバンドルの方がロケールの解決等をしてくれ取得が楽なため、リソースバンドルを用いて取得した方がいいだろう。
プロパティファイルにASCII文字以外の文字列を記述する場合には、Unicodeに変換する必要がある。
Unicodeへの変換は、J2SEに付属しているnative2asciiコマンドを使用する。
変換後のファイルは「プロパティファイル名_言語コード.properties」とする。「言語コード」はロケールで使用される言語コードであり、日本語であれば「ja」となる。この命名規則を使用することで、リソースバンドル使用時にロケールの自動解決が行われる。
プロパティファイルを使用することで、プログラムの設定を外部ファイル化することができる。
そうしない場合、設定はプログラム上にハードコーディングされることになり、設定の変更に再コンパイルが必要となる。プロパティファイルを用いることで、再コンパイルをせずに設定を変更でき、また設定をひとつにまとめることができるようになる。
拡張子が.propertiesのファイル。多くの場合、クラスファイル(拡張子が.classのファイル)の置いてあるディレクトリ(通常はbinディレクトリ)に置かれる。
テキストファイルで、各行に「キー=値」の形式で記述し、「キー」を元に「値」を取得することができる。仕組みはHashMapクラスと同じく、「辞書」構造となる。
プロパティファイルを直接指定する場合にはストリームクラスとPropertiesクラスを用いて取得する。また、リソースバンドルを用いて取得することもできる。リソースバンドルの方がロケールの解決等をしてくれ取得が楽なため、リソースバンドルを用いて取得した方がいいだろう。
プロパティファイルにASCII文字以外の文字列を記述する場合には、Unicodeに変換する必要がある。
Unicodeへの変換は、J2SEに付属しているnative2asciiコマンドを使用する。
変換後のファイルは「プロパティファイル名_言語コード.properties」とする。「言語コード」はロケールで使用される言語コードであり、日本語であれば「ja」となる。この命名規則を使用することで、リソースバンドル使用時にロケールの自動解決が行われる。
プロパティファイルを使用することで、プログラムの設定を外部ファイル化することができる。
そうしない場合、設定はプログラム上にハードコーディングされることになり、設定の変更に再コンパイルが必要となる。プロパティファイルを用いることで、再コンパイルをせずに設定を変更でき、また設定をひとつにまとめることができるようになる。
// Sample.java
import java.util.Properties;
import java.io.FileInputStream;
import java.io.IOException;
public class Sample
{
public static void main( String[] args )
{
try
{
// 適当な位置にApplicationResources.properties
// というテキストファイルを作って、その中に次の文を記述してください。
// sample.data=100
// このファイル(リソースファイル)の絶対パスは以下の通りとします。
String path = "D:/sample/bin/ApplicationResources.properties";
// このリソースファイルを直接開きます。
FileInputStream fis = new FileInputStream( path );
Properties properties = new Properties();
properties.load( fis );
fis.close();
// キーを元に値を取得します。
// キーはApplicationResources.propertiesの中の「sample.data」、
// 値はその=の右の「100」です。
String value = (String)properties.get( "sample.data" );
System.out.println( value );
// 100
// リソースファイルの中に日本語を入れる場合。
// まずApplicationResources_ja.txtというテキストファイルを作って、
// その中に次の文を記述してください。
// sample.name=あいうえお
// 次に、コマンドラインでカレントディレクトリを
// ApplicationResources_ja.txtファイルがあるディレクトリに変えてから、
// 以下のコマンドを実行してください。
// native2ascii ApplicationResources_ja.txt ApplicationResources_ja.properties
// そうすると、ApplicationResources_ja.propertiesというファイルが作られます。
// jaは、ロケールの言語コードの「日本語」の印です。
// この中には以下の文が入っています。
// sample.name=\u3042\u3044\u3046\u3048\u304a
// これは、先ほどの日本語をUnicodeに変換したものです。
// このリソースファイルの絶対パスは以下の通りとします。
String path_ja = "D:/sample/bin/ApplicationResources_ja.properties";
// このリソースファイルを直接開きます。
fis = new FileInputStream( path_ja );
properties.load( fis );
fis.close();
// キーを元に値を取得します。
// キーはApplicationResources.propertiesの中の「sample.name」、
// 値はその=の右の「あいうえお」です。
value = (String)properties.get( "sample.name" );
System.out.println( value );
// あいうえお
// 実際には、リソースバンドルを使用して取得した方が楽です。
// それについてはリソースバンドルの項目を参照。
}
catch( IOException e )
{
// ファイルがみつからない場合等はIOException例外が投げられます。
e.printStackTrace();
}
}
}
import java.util.Properties;
import java.io.FileInputStream;
import java.io.IOException;
public class Sample
{
public static void main( String[] args )
{
try
{
// 適当な位置にApplicationResources.properties
// というテキストファイルを作って、その中に次の文を記述してください。
// sample.data=100
// このファイル(リソースファイル)の絶対パスは以下の通りとします。
String path = "D:/sample/bin/ApplicationResources.properties";
// このリソースファイルを直接開きます。
FileInputStream fis = new FileInputStream( path );
Properties properties = new Properties();
properties.load( fis );
fis.close();
// キーを元に値を取得します。
// キーはApplicationResources.propertiesの中の「sample.data」、
// 値はその=の右の「100」です。
String value = (String)properties.get( "sample.data" );
System.out.println( value );
// 100
// リソースファイルの中に日本語を入れる場合。
// まずApplicationResources_ja.txtというテキストファイルを作って、
// その中に次の文を記述してください。
// sample.name=あいうえお
// 次に、コマンドラインでカレントディレクトリを
// ApplicationResources_ja.txtファイルがあるディレクトリに変えてから、
// 以下のコマンドを実行してください。
// native2ascii ApplicationResources_ja.txt ApplicationResources_ja.properties
// そうすると、ApplicationResources_ja.propertiesというファイルが作られます。
// jaは、ロケールの言語コードの「日本語」の印です。
// この中には以下の文が入っています。
// sample.name=\u3042\u3044\u3046\u3048\u304a
// これは、先ほどの日本語をUnicodeに変換したものです。
// このリソースファイルの絶対パスは以下の通りとします。
String path_ja = "D:/sample/bin/ApplicationResources_ja.properties";
// このリソースファイルを直接開きます。
fis = new FileInputStream( path_ja );
properties.load( fis );
fis.close();
// キーを元に値を取得します。
// キーはApplicationResources.propertiesの中の「sample.name」、
// 値はその=の右の「あいうえお」です。
value = (String)properties.get( "sample.name" );
System.out.println( value );
// あいうえお
// 実際には、リソースバンドルを使用して取得した方が楽です。
// それについてはリソースバンドルの項目を参照。
}
catch( IOException e )
{
// ファイルがみつからない場合等はIOException例外が投げられます。
e.printStackTrace();
}
}
}
// Sample.java import java.util.Properties; import java.io.FileInputStream; import java.io.IOException; public class Sample { public static void main( String[] args ) { try { // 適当な位置にApplicationResources.properties // というテキストファイルを作って、その中に次の文を記述してください。 // sample.data=100 // このファイル(リソースファイル)の絶対パスは以下の通りとします。 String path = "D:/sample/bin/ApplicationResources.properties"; // このリソースファイルを直接開きます。 FileInputStream fis = new FileInputStream( path ); Properties properties = new Properties(); properties.load( fis ); fis.close(); // キーを元に値を取得します。 // キーはApplicationResources.propertiesの中の「sample.data」、 // 値はその=の右の「100」です。 String value = (String)properties.get( "sample.data" ); System.out.println( value ); // 100 // リソースファイルの中に日本語を入れる場合。 // まずApplicationResources_ja.txtというテキストファイルを作って、 // その中に次の文を記述してください。 // sample.name=あいうえお // 次に、コマンドラインでカレントディレクトリを // ApplicationResources_ja.txtファイルがあるディレクトリに変えてから、 // 以下のコマンドを実行してください。 // native2ascii ApplicationResources_ja.txt ApplicationResources_ja.properties // そうすると、ApplicationResources_ja.propertiesというファイルが作られます。 // jaは、ロケールの言語コードの「日本語」の印です。 // この中には以下の文が入っています。 // sample.name=\u3042\u3044\u3046\u3048\u304a // これは、先ほどの日本語をUnicodeに変換したものです。 // このリソースファイルの絶対パスは以下の通りとします。 String path_ja = "D:/sample/bin/ApplicationResources_ja.properties"; // このリソースファイルを直接開きます。 fis = new FileInputStream( path_ja ); properties.load( fis ); fis.close(); // キーを元に値を取得します。 // キーはApplicationResources.propertiesの中の「sample.name」、 // 値はその=の右の「あいうえお」です。 value = (String)properties.get( "sample.name" ); System.out.println( value ); // あいうえお // 実際には、リソースバンドルを使用して取得した方が楽です。 // それについてはリソースバンドルの項目を参照。 } catch( IOException e ) { // ファイルがみつからない場合等はIOException例外が投げられます。 e.printStackTrace(); } } }