Javaプロパティ入門

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プロジェクト]にあります。