2004/08
PropertiesファイルをよみこんでValueObjectに格納するって処理は
よくあることです。項目が多い場合だと格納するコードを書くのが面倒です。
そこで、それらを動的に行う汎用的なクラスを作っていました。
「動的」ってことは?リフレクションの出番です。しかし今回は
リフレクションを直接使わずにJakarta CommonsのBeanUtilsを
使ってみました。
スポンサーリンク
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
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