java プロパティファイルを読み込むクラスを自作したい場合の簡単なサンプル

ResourceBundleを使用してプロパティファイルを読み込むサンプル。
複雑なことはしておらず、プロパティファイルにしか対応できない。
■プロパティファイル
errors.invalid={0}が不正です。
errors.maxlength={0}の長さが最大値({1})を超えています。
errors.minlength={0}の長さが最小値({1})未満です。

のようなkey=valueでメッセージなどを定義したファイルのこと
■以下サンプル
【TestBatch1.java】
package batch;

import java.util.MissingResourceException;

import common.MessageIdEnum;

import buhin.MessageHolder;

public class TestBatch1 {
 
 
 private static MessageHolder messageHolder = null;

 /**
  * @param args
  */
 public static void main(String[] args) {
  
  try {
   
   String path = args[0];
   
   messageHolder = new MessageHolder(path);
   
   messageHolder.printResourceBundle();
   
   System.out.println(“★————★————★”);
   System.out.println(messageHolder.getMessage(MessageIdEnum.ERRORS_DATEPASSED));

   System.out.println(“★————★————★”);
   System.out.println(messageHolder.getMessage(
     MessageIdEnum.TEST_ERR_MSG,
     MessageIdEnum.TEST_MSG4,
     MessageIdEnum.TEST_MSG6));
   
  } catch (MissingResourceException e) {
   e.printStackTrace();
  } catch (Exception e) {
   e.printStackTrace();
  }

  
 }

 
 
 
 
}

 

 

【MessageHolder.java】

このクラスがファイルを読み込み保持する
package buhin;

import java.util.Enumeration;
import java.util.ResourceBundle;

import common.MessageIdEnum;

public class MessageHolder {
 
 /**
  * リソース保存用クラス
  */
 private ResourceBundle rb = null;
 
 /**
  * コンストラクタ
  * プロパティファイルから読み込む
  * @param filePath
  */
 public MessageHolder(String filePath) {
  this.rb = ResourceBundle.getBundle(filePath);
 }
 
 /**
  * メッセージを返す
  * @param messageId
  * @return String メッセージ単発
  */
 public String getMessage(MessageIdEnum messageId) {
  return this.rb.getString(messageId.toString());
 }
 
 
 
 /**
  * application_ja.porpetiesからメッセージを取得する
  * @param messageId メッセージのキー
  * @param messageArgs メッセージに置換文字列が有る場合に置換するメッセージのキー
  * @return
  */
 public String getMessage(
   MessageIdEnum messageId,
   MessageIdEnum … messageArgs) {
  
   String subject = this.rb.getString(messageId.toString());

   if (messageArgs == null) {
   return subject;
  }
  
   /**
    * 引数の数分置き換える
    */
   for(int i = 0; i < messageArgs.length; i ++) {
    
    String arg = this.rb.getString(messageArgs[i].toString());

    subject = replaceString(“\\{” + String.valueOf(i) + “\\}”, arg, subject);
    
   }
   
  return subject;
  
 }
 
 /**
  * 文字列の置換をする <br />
  *
  * @param search
  *            置換対象の文字
  * @param replace
  *            置換後の文字
  * @param subject
  *            対象の文字列
  * @return 置換後の文字列
  */
 public String replaceString(String search, String replace,
   String subject) {
  return subject.replaceAll(search, replace);
 }
 
 /**
  * テスト用のメソッド
  */
 public void printResourceBundle() {
  
  for (Enumeration<String> e = rb.getKeys(); e.hasMoreElements();) {
   String key = (String) e.nextElement();
   String val = rb.getString(key);
   System.out.println(key + “=” + val);
  }

  System.out.println(“★————★————★”);

 }
 

}
【MessageIdEnum.java】
package common;

public enum MessageIdEnum {

 TEST_MSG4(“test.msg4”),
 TEST_MSG5(“test.msg5”),
 TEST_MSG6(“test.msg6”),
 TEST_ERR_MSG(“test.message”);

 /**
  * コンストラクタに指定した文字列を保持するキー
  */
 private String id;

 /**
  * コンストラクタ
  *
  * @param k
  *            列挙を保持するキー
  */
 private MessageIdEnum(String id) {
  this.id = id;
 }

 /**
  * 文字列表現を返す
  *
  * @return 文字列表現
  */

 public String toString() {
  return this.id;
 }
 
}