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