することができるリソースバンドルのファイル内のリソースバンドル

StackOverflow https://stackoverflow.com/questions/4614465

  •  26-09-2019
  •  | 
  •  

質問

を用いて java.util.ResourceBundle 負荷ロパティ情報を取得します。当社のプロパティファイルに成長しなくてはいけない、というので、いきたいと思っています分裂の修士プロパティファイルのコミュニケーションモジュールです。両立できるものです。

master.properties

==> 

 master.properties
   include moduleA.properties
   include moduleB.properties

ん?

役に立ちましたか?

解決

まず、なぜかまいの java.util.ResourceBundle 以上 java.util.Properties.されどのようにおうかがいしまいなかったのでしょうかを気化/国際化や約束をファイルを継承関係を示します。

Properties この特別ている実 Map るには、 putAll() 法を統合う。キックオフとえば:

Properties master = new Properties();
master.load(masterInput);

Properties moduleA = new Properties();
moduleA.load(moduleAinput);
master.putAll(moduleA);

Properties moduleB = new Properties();
moduleB.load(moduleBinput);
master.putAll(moduleB);

// Now `master` contains the properties of all files.

しまな主張を利用 ResourceBundle, は、最高のベットをカスタム ResourceBundle 記載の使節に重要な役割を果の負荷によるカスタム Control.

と仮定するときに以下のエントリ master.properties 代表取commaseparated文字列のベースの名前のモジュールのプロパティファイル:

include=moduleA,moduleB

これにより,以下のようなカスタム ResourceBundle 例は:

public class MultiResourceBundle extends ResourceBundle {

    protected static final Control CONTROL = new MultiResourceBundleControl();
    private Properties properties;

    public MultiResourceBundle(String baseName) {
        setParent(ResourceBundle.getBundle(baseName, CONTROL));
    }

    protected MultiResourceBundle(Properties properties) {
        this.properties = properties;
    }

    @Override
    protected Object handleGetObject(String key) {
        return properties != null ? properties.get(key) : parent.getObject(key);
    }

    @Override
    @SuppressWarnings("unchecked")
    public Enumeration<String> getKeys() {
        return properties != null ? (Enumeration<String>) properties.propertyNames() : parent.getKeys();
    }

    protected static class MultiResourceBundleControl extends Control {
        @Override
        public ResourceBundle newBundle(
            String baseName, Locale locale, String format, ClassLoader loader, boolean reload)
                throws IllegalAccessException, InstantiationException, IOException
        {
            Properties properties = load(baseName, loader);
            String include = properties.getProperty("include");
            if (include != null) {
                for (String includeBaseName : include.split("\\s*,\\s*")) {
                    properties.putAll(load(includeBaseName, loader));
                }
            }
            return new MultiResourceBundle(properties);
        }

        private Properties load(String baseName, ClassLoader loader) throws IOException {
            Properties properties = new Properties();
            properties.load(loader.getResourceAsStream(baseName + ".properties"));
            return properties;
        }
    }

}

(凡例外処理で局所的に取り扱いを残しておき京メトロ銀座線"田原町駅"徒歩き)

として使用できます:

ResourceBundle bundle = new MultiResourceBundle("master");

他のヒント

できprogramaticallyしかし、構築ResourceBundleです"というファイルは巨大なそうであれば読み込まれます。

更新

public class Resource extends java.util.ResourceBundle {



    public Object handleGetObject(String key) {
         //code
    }

    public Enumeration getKeys() {
         //code
    }
}

そのためにロケール

import java.util.*;

public class Resource_en_IN extends Resource{

  public Object handleGetObject(String key) {
    //code
  }
}
テストソリューションよりも思考のための

その他の食品ます。

XMLファイルのサポートの実体の解析中の他のファイルからのインラインテキストに。場合は、この技術は、ファイルをモジュール化するために使用されている複雑なXMLファイルは、見られます。

Propertiesは現在、2つのファイル形式、キー/値のペアと共通.propertiesフォーマットとXMLフォーマットをサポートしています。 Propertiesは、XMLファイルから/にロードして保存することができます。

ResourceBundle

PropertyResourceBundleは1つの直接のサブクラスを持っています。それは、このクラスのように見え、実際に古いキー/値のペアの形式に限定されているが、XMLPropertyResourceBundleトリックは、それらのファイルをモジュール化するのに役立つ可能性があり、XMLファイルからプロパティを読み取ることができるentityのような別のクラスを実装するために使用することができます。

この作品の場合 - 。XMLプロパティファイルに既存のプロパティファイルを変換することは簡単なはずです、単にXMLを標準フォーマットとストアから読み、Propertiesクラスを使用します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top