home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

Java/Property, ResourceBundleメモ

Java/Property, ResourceBundleメモ

Java / Property, ResourceBundleメモ
id: 803 所有者: msakamoto-sf    作成日: 2010-10-06 11:35:04
カテゴリ: Java 

書く度に忘れてしまうので、まとめてメモ。

INIファイル風に使えるpropertiesファイルをjava.util.Propertiesでロード

Test1.java:

import java.io.*;
import java.util.*;
 
public class Test1 {
    public static void main(String args[]) {
        if (1 > args.length) {
            System.err.println("args : *.properties");
            return;
        }
        Properties prop = new Properties();
        try {
            prop.load(new FileInputStream(new File(args[0])));
        } catch (IOException e) {
            e.printStackTrace();
            return;
        }
        for (Map.Entry<Object, Object> e : prop.entrySet()) {
            System.out.println(e.getKey() + "=" + e.getValue());
        }
    }
}

foo.ini

## java property file
a.b.c=123
#comment
foo=aaaaaaaaaaaaaaaaaaaaaaaa

実行:

> java Test1 foo.ini
a.b.c=123
foo=aaaaaaaaaaaaaaaaaaaaaaaa

java.util.Propertiesは Map<Object,Object> interfaceを実装してるので、アプリ中ではinterfaceで受けて使い回してもOK。

参考:

ResourceBundleで国際化 with properties ファイル

ただのResourceBundleだけだと、リソースバンドルをクラスで作ったり面倒くさい。
メッセージの国際化なら文字列しか扱わないので、PropertyResourceBundleでpropertiesファイルを使って済ませることが出来る。

pack/age/Test1.java:

package pack.age;
 
import java.util.*;
 
public class Test1 {
    public static void main(String args[]) {
        Locale currentLocale = Locale.getDefault();
        System.out.println(currentLocale);
        
        ResourceBundle res = PropertyResourceBundle.getBundle(
            "pack.age.restest");
        System.out.println(res.getString("foo"));
        System.out.println(res.getString("bar"));
    }
}

pack/age/restest.properties:

foo=English
bar=Version

pack/age/restest_cp932.properties:

foo=日本語
bar=バージョン

UNICODEに変換:

native2ascii pack\age\restest_cp932.properties pack\age\restest_ja.properties

日本語ロケールで実行:

> java -cp . pack.age.Test1
ja_JP
日本語
バージョン

英語ロケールで実行1:

> java -Duser.language=en -cp . pack.age.Test1
en_JP
English
Version

国がJPなのに言語がenって、何か不思議ですね。

英語ロケールで実行2:

> java -Duser.language=en -Duser.region=us  -cp . pack.age.Test1
en_US
English
Version

参考:



プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2010-10-06 11:51:06
md5:f123ee29307ddf5350ade1678509863b
sha1:9e31c9b7306304fd7c69e77e6728935c67728834
コメント
コメントを投稿するにはログインして下さい。