便利なコードパーツ集!

やまろうのプログラミングTips

Java

[Java] Propertiesファイルを動的にValueObjectへ格納する

投稿日:

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

org.apache.commons.beanutils.BeanUtilsを使ってるからJakartaプロジェクトの
サイトからダウンロードしてクラスパスに追加してねん!

[実行結果]

obj.getName()=yamarou
obj.getTelephoneNo()=090-1234-5678
スポンサーリンク

-Java

Copyright© やまろうのプログラミングTips , 2022 AllRights Reserved Powered by AFFINGER4.