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;
}
}