1概要

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

そのため、この言語はプロパティを最初にサポートしています –

java.util.Properties

– このタイプの設定ファイルを扱うために設計されたユーティリティクラスです。

この記事では、これに焦点を当てます。


2プロパティの読み込み


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

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


app.properties:

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

そして

カタログ

:

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

クラスによって正しく解析されます。

プロパティファイル形式

の詳細は、こちらをご覧ください。


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

プロパティファイルの他に、

Properties

クラスは特定のDTD仕様に準拠するXMLファイルもロードできます。

XMLファイル

icons.xml

からキーと値のペアをロードする例を示します。

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
    <comment>xml example</comment>
    <entry key="fileIcon">icon1.jpg</entry>
    <entry key="imageIcon">icon2.jpg</entry>
    <entry key="videoIcon">icon3.jpg</entry>
</properties>

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

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", "baeldung");
String appDownloadAddr = appProps.getProperty("downloadAddr");

assertEquals("1.0", appVersion);
assertEquals("TestApp", appName);
assertEquals("baeldung", 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.baeldung.com/downloads");//add new key-value pair

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

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


Properties

クラスは

Hashtable

クラスから

put()

methodおよび

putAll()

メソッドを継承していますが、

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<Object> valueEnumeration = appProps.elements();
while (valueEnumeration.hasMoreElements()) {
    System.out.println(valueEnumeration.nextElement());
}

Enumeration<Object> 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.結論

この記事では、プロパティとXMLフォーマットの両方で

Properties

loadキーストアとストアキーストアを使用する方法、値の取得、値の更新など、

Propertiesオブジェクトでキーと値のペアを操作する方法を含む基本的な

Properties

クラスの使用法について説明しました。 、そのサイズ、および

Properties__オブジェクトのデフォルトリストの使用方法を取得します。

例の完全なソースコードは、このhttps://github.com/eugenp/tutorials/tree/master/core-java[GitHubプロジェクト]にあります。