Code Log

プログラミングの勉強メモを残していきます。

Java Propertiesで習得したプロパティファイルの内容をMapに詰め込み表示する


<スポンサーリンク>

DBのパスワードや、サーバのIPアドレスなどは、プログラム中にハードコーディングしてしまうと、変更するたびにテストし直さなけれbいけなくなってしまいます。
プロパティは外にあるファイルとして、別に定義したいです。

そんなときに使うのが、Propertiesクラスです。

Javaではプロパティファイルを外部ファイルとして読み込んで、その値を使うことができます。

以下のようにプロパティファイルを読み込むのが定石となっています。

Properties prop = new Properties();

try {
	prop.load(new FileInputStream(PROP_FILE));
} catch (IOException e) {
	e.printStackTrace();
}

今回は、以下のようなtest.propertiesというファイルを読み込んで、その値をkeyとvalueにしてJavaのMapオブジェクトに詰め込んでみます。

#このサイトから→http://otndnld.oracle.co.jp/products/jdev/htdocs/1013/jdev_oc4jdp4/jdev_oc4jdp4_buildsample.html
# JDeveloperをインストールしたディレクトリ
jdev.home=D:/JDeveloper

# OC4Jをインストールしたディレクトリ
oracle.home=D:/oc4j

# Modelプロジェクトの設定
model.dir=../Model
model.src.dir=${model.dir}/src
model.output.dir=${model.dir}/classes

実際に読み込みを行うプログラムは以下のとおりです。

package example;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;

public class Samples {
	private final String PROP_FILE = "test.properties";

	public Map getPropertiesMap() {
		Map propertiesMap = new HashMap();
		Properties prop = new Properties();

		try {
			prop.load(new FileInputStream(PROP_FILE));
		} catch (IOException e) {
			e.printStackTrace();
		}

		for (Entry<Object, Object> e : prop.entrySet()) {
			propertiesMap.put(e.getKey(),e.getValue());
		}

		return propertiesMap;
	}
}

このメソッドがちゃんと機能しているかどうか、JUnitを使ってテストしてみます。

package example;

import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;

import java.util.Iterator;
import java.util.Map;

import org.junit.Test;

public class SamplesTest {

	@Test
	public void プロパティファイルから取ったMapのサイズが5() {
		Samples sample = new Samples();
		Map map = sample.getPropertiesMap();

		Iterator ite = map.entrySet().iterator();
		while (ite.hasNext()) {
			Map.Entry pairs = (Map.Entry)ite.next();
			System.out.println("key:" + pairs.getKey() + "\tvalue:" + pairs.getValue());
		}

		assertThat(map.size(),is(5));
	}

}

結果、コンソールには以下のように表示されます。

key:model.src.dir	value:${model.dir}/src
key:model.dir	value:../Model
key:jdev.home	value:D:/JDeveloper
key:model.output.dir	value:${model.dir}/classes
key:oracle.home	value:D:/oc4j

テストはグリーンで、コメントは無視されて、5つのプロパティを取得することができたようです。

改訂2版 パーフェクトJava

改訂2版 パーフェクトJava