Javaプロパティ入門

Javaプロパティの使用開始

1. 概要

ほとんどのJavaアプリケーションは、コンパイルされたコードの外部で、一般に単純なパラメーターをキーと値のペアとして格納するために、ある時点でプロパティを使用する必要があります。

そのため、この言語では、プロパティのファーストクラスサポート(java.util.Properties)があります。これは、このタイプの構成ファイルを処理するために設計されたユーティリティクラスです。

これが、この記事で焦点を当てる内容です。

2. プロパティの読み込み

2.1. プロパティファイルから

プロパティファイルからキーと値のペアをロードする例から始めましょう。クラスパスで利用できる2つのファイルを読み込んでいます。

app.properties:

version=1.0
name=TestApp
date=2016-11-12

Andcatalog

c1=files
c2=images
c3=videos

プロパティファイルでは「.properties」という接尾辞を使用することをお勧めしますが、必須ではないことに注意してください。

これで、それらを非常に簡単にPropertiesインスタンスにロードできます。

String rootPath = Thread.currentThread().getContextClassLoader().getResource("").getPath();
String appConfigPath = rootPath + "app.properties";
String catalogConfigPath = rootPath + "catalog";

Properties appProps = new Properties();
appProps.load(new FileInputStream(appConfigPath));

Properties catalogProps = new Properties();
catalogProps.load(new FileInputStream(catalogConfigPath));


String appVersion = appProps.getProperty("version");
assertEquals("1.0", appVersion);

assertEquals("files", catalogProps.getProperty("c1"));

ファイルのコンテンツがプロパティファイル形式の要件を満たしている限り、Propertiesクラスで正しく解析できます。 Property file formatの詳細は次のとおりです。

2.2. XMLファイルからロード

プロパティファイルに加えて、Propertiesクラスは特定のDTD仕様に準拠するXMLファイルをロードすることもできます。

XMLファイルからキーと値のペアをロードする例を次に示します–icons.xml




    xml example
    icon1.jpg
    icon2.jpg
    icon3.jpg

それでは、ロードしましょう。

String rootPath = Thread.currentThread().getContextClassLoader().getResource("").getPath();
String iconConfigPath = rootPath + "icons.xml";
Properties iconProps = new Properties();
iconProps.loadFromXML(new FileInputStream(iconConfigPath));

assertEquals("icon1.jpg", iconProps.getProperty("fileIcon"));

3. プロパティを取得する

getProperty(String key)getProperty(String key, String defaultValue)を使用して、キーで値を取得できます。

キーと値のペアが存在する場合、2つのメソッドは両方とも対応する値を返します。 ただし、そのようなキーと値のペアがない場合、前者はnullを返し、後者は代わりにdefaultValueを返します。

コード例:

String appVersion = appProps.getProperty("version");
String appName = appProps.getProperty("name", "defaultName");
String appGroup = appProps.getProperty("group", "example");
String appDownloadAddr = appProps.getProperty("downloadAddr");

assertEquals("1.0", appVersion);
assertEquals("TestApp", appName);
assertEquals("example", appGroup);
assertNull(appDownloadAddr);

PropertiesクラスはHashtableクラスからget()メソッドを継承しますが、値を取得するためにそれを使用することはお勧めしません。 そのget()メソッドはStringにのみキャストできるObject値を返し、getProperty()メソッドはすでに生のObject値を適切に処理しているためです。

以下のコードはExceptionをスローします:

float appVerFloat = (float) appProps.get("version");

4. プロパティを設定する

setProperty()メソッドを使用して、既存のキーと値のペアを更新したり、新しいキーと値のペアを追加したりできます。

コード例:

appProps.setProperty("name", "NewAppName"); // update an old value
appProps.setProperty("downloadAddr", "www.example.com/downloads"); // add new key-value pair

String newAppName = appProps.getProperty("name");
assertEquals("NewAppName", newAppName);

String newAppDownloadAddr = appProps.getProperty("downloadAddr");
assertEquals("www.example.com/downloads", newAppDownloadAddr);

Propertiesクラスはput()メソッドとputAll()メソッドをHashtableクラスから継承しますが、get()と同じ理由でそれらを使用することはお勧めしません。メソッド:Propertiesで使用できるのはString値のみです。

以下のコードは希望どおりに機能しません。getProperty()を使用して値を取得すると、nullが返されます。

appProps.put("version", 2);

5. プロパティを削除する

キーと値のペアを削除する場合は、remove()メソッドを使用できます。

コード例:

String versionBeforeRemoval = appProps.getProperty("version");
assertEquals("1.0", versionBeforeRemoval);

appProps.remove("version");
String versionAfterRemoval = appProps.getProperty("version");
assertNull(versionAfterRemoval);

6. 格納

6.1. プロパティファイルに保存

Propertiesクラスは、キーと値のペアを出力するためのstore()メソッドを提供します。

コード例:

String newAppConfigPropertiesFile = rootPath + "newApp.properties";
appProps.store(new FileWriter(newAppConfigPropertiesFile), "store to properties file");

2番目のパラメーターはコメント用です。 コメントを書きたくない場合は、単にnullを使用してください。

6.2. XMLファイルに保存

Propertiesクラスは、キーと値のペアをXML形式で出力するためのstoreToXML()メソッドも提供します。

コード例:

String newAppConfigXmlFile = rootPath + "newApp.xml";
appProps.storeToXML(new FileOutputStream(newAppConfigXmlFile), "store to xml file");

2番目のパラメーターは、store()メソッドのパラメーターと同じです。

7. その他の一般的な操作

Propertiesクラスは、プロパティを操作するための他のいくつかのメソッドも提供します。

コード例:

appProps.list(System.out); // list all key-value pairs

Enumeration valueEnumeration = appProps.elements();
while (valueEnumeration.hasMoreElements()) {
    System.out.println(valueEnumeration.nextElement());
}

Enumeration keyEnumeration = appProps.keys();
while (keyEnumeration.hasMoreElements()) {
    System.out.println(keyEnumeration.nextElement());
}

int size = appProps.size();
assertEquals(3, size);




8. デフォルトのプロパティリスト

Propertiesオブジェクトには、デフォルトのプロパティリストとして別のPropertiesオブジェクトを含めることができます。 元のプロパティキーが見つからない場合、デフォルトのプロパティリストが検索されます。

app.properties」の他に、クラスパスに「default.properties」という別のファイルがあります。

default.properties:

site=www.google.com
name=DefaultAppName
topic=Properties
category=core-java

コード例:

String rootPath = Thread.currentThread().getContextClassLoader().getResource("").getPath();

String defaultConfigPath = rootPath + "default.properties";
Properties defaultProps = new Properties();
defaultProps.load(new FileInputStream(defaultConfigPath));

String appConfigPath = rootPath + "app.properties";
Properties appProps = new Properties(defaultProps);
appProps.load(new FileInputStream(appConfigPath));

assertEquals("1.0", appVersion);
assertEquals("TestApp", appName);
assertEquals("www.google.com", defaultSite);

9. プロパティとエンコーディング

デフォルトでは、プロパティファイルはISO-8859-1(Latin-1)でエンコードされていると想定されているため、ISO-8859-1以外の文字を含むプロパティは通常使用しないでください。

必要に応じて、JDK native2asciiツールやファイルの明示的なエンコーディングなどのツールを使用して、この制限を回避できます。

XMLファイルの場合、loadFromXML()メソッドとstoreToXML()メソッドはデフォルトでUTF-8文字エンコードを使用します。

ただし、異なる方法でエンコードされたXMLファイルを読み取る場合は、DOCTYPE宣言で指定できます。書き込みも十分に柔軟です。storeToXML()APIの3番目のパラメーターでエンコードを指定できます。

10. 結論

この記事では、Propertiesを使用して、プロパティとXML形式の両方でキーと値のペアをロードおよび保存する方法、Propertiesでキーと値のペアを操作する方法など、基本的なPropertiesクラスの使用法について説明しました。値の取得、値の更新、サイズの取得、Propertiesオブジェクトのデフォルトリストの使用方法などのt2)sオブジェクト。

この例の完全なソースコードは、このGitHub projectにあります。