2004/08
PropertiesファイルをよみこんでValueObjectに格納するって処理は
よくあることです。項目が多い場合だと格納するコードを書くのが面倒です。
そこで、それらを動的に行う汎用的なクラスを作っていました。
「動的」ってことは?リフレクションの出番です。しかし今回は
リフレクションを直接使わずにJakarta CommonsのBeanUtilsを
使ってみました。
package jp.gr.java_conf.yamarou.util;
import java.io.FileInputStream;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Enumeration;
import java.util.Properties;
import org.apache.commons.beanutils.BeanUtils;
/**
* プロパティファイルを読み込み、ValueObjectへ格納する。
* @author yamarou
*/
public class PropertiesUtil {
/**
* プロパティファイルを読み込み、ValueObjectへ格納する。
* @param file プロパティファイルのパス
* @param obj 格納されるValueObject
* @throws IOException
* @throws IllegalAccessException
* @throws InvocationTargetException
*/
public static void loadPropertiesToObject(String file, Object obj)
throws IOException, IllegalAccessException, InvocationTargetException {
Properties prop = new Properties();
FileInputStream in = new FileInputStream(file);
prop.load(in);
in.close();
Enumeration enum = prop.propertyNames();
while (enum.hasMoreElements()) {
String name = (String) enum.nextElement();
BeanUtils.setProperty(obj, name, prop.getProperty(name));
}
}
}
package jp.gr.java_conf.yamarou.util;
/**
* Test用のVO
* @author yamarou
*/
public class TestVO {
private String name;
private String telephoneNo;
/**
* @return
*/
public String getName() {
return name;
}
/**
* @return
*/
public String getTelephoneNo() {
return telephoneNo;
}
/**
* @param string
*/
public void setName(String string) {
name = string;
}
/**
* @param string
*/
public void setTelephoneNo(String string) {
telephoneNo = string;
}
}
package jp.gr.java_conf.yamarou.util;
import junit.framework.TestCase;
public class PropertiesUtilTest extends TestCase {
public PropertiesUtilTest(String arg0) {
super(arg0);
}
public static void main(String[] args) {
junit.textui.TestRunner.run(PropertiesUtilTest.class);
}
final public void testLoadPropertiesToObject() throws Exception {
TestVO obj = new TestVO();
PropertiesUtil.loadPropertiesToObject(
"PropertiesUtilTest.properties", obj);
System.out.println("obj.getName()="+obj.getName());
assertEquals("yamarou", obj.getName());
System.out.println("obj.getTelephoneNo()="+obj.getTelephoneNo());
assertEquals("090-1234-5678", obj.getTelephoneNo());
}
}
読み込むファイルは以下です。
[PropertiesUtilTest.properties]
name=yamarou
telephoneNo=090-1234-5678
telephoneNo=090-1234-5678
org.apache.commons.beanutils.BeanUtilsを使ってるからJakartaプロジェクトの
サイトからダウンロードしてクラスパスに追加してねん!
[実行結果]
obj.getName()=yamarou
obj.getTelephoneNo()=090-1234-5678
obj.getTelephoneNo()=090-1234-5678