5

実際にロードせずにResourceBundleの存在を確認したいのですが。

通常、私はGuiceを使用しており、初期化時に存在を確認し、実行時にロードします。バンドルが存在しない場合は、RBが存在しないことを早期に報告したいと思います。

特定のResourceBundleに使用されるResourceBundle.Controlインスタンスを取得できれば、実際のリソース名を作成するための基本情報を取得するのに問題はありません(toBundleName()およびtoResourceName()を使用)が、そうではありません。そのレベル。

編集:

わかりました、私はそれを行う方法を見つけました。拡張可能なResourceBundle.Controlを作成して(custome addFormat(String、Class)を使用)、すべてのバンドル形式を格納してから、独自の別のメソッドを使用して、特定のロケールで可能なすべてのファイル名をチェックします(Classを使用)。以下に示すようにgetResource)。

コーディングスピーキング:

class MyControl extends ResourceBundle.Control {
  private Map<String,Class<? extends ResourceBundle>> formats = new LinkedHashMap();
  public void addFormat(String format,Class<? extends ResourceBundle> rbType) {
    formats.put(format, rbType);
  }
  public boolean resourceBundleExists(ClassLoader loader, String baseName, Locale locale) {
    for (String format: formats.keySet()) {
      // for (loop on locale hierarchy) {
        if (loader.getResource(toResourceName(toBundleName(baseName, locale), format)) != null) {
          return true;
        }
      // }
    }
    return false;
  }
}
4

3 に答える 3

5

デフォルトのバンドルが存在する必要がある場合は、次のことができます。

Class.getResource("/my/path/to/bundle.properties")

また、ファイルへのURLを返すか、存在しない場合はnullを返します。

もちろん、多数ある場合は、正しいクラスまたはクラスローダーを使用してください。

編集:クラスとしてリソースがある場合は、チェックする必要があります

Class.getResource("/my/path/to/bundle.class")

Java 6では、リソースバンドルをXMLで保存できます。ResourceBundleクラスがこのリソースをどのように検索するかはわかりませんが、同じ方法であると思います。

于 2010-01-13T10:13:52.747 に答える
0

バンドルをロードしてチェックを行い、次に呼び出すResourceBundle.clearCache()ように呼び出すことができます。

これは(初期化時に)1回発生し、それほど重い操作ではないため、問題にはなりません。

または、リソースがクラスパスに存在するかどうかを確認することもできます。たとえば、フォールバック.propertiesファイル、またはデフォルトロケールのプロパティファイル。

最後に、のコードを確認した後ResourceBundle.Control、メソッドで実行することを実行するオプションがありますnewBundle()

于 2010-01-13T10:10:08.587 に答える
0

こんなもの、もしかして

ResourceBundle bundle;
public PropertiesExist() {
    String propsFile = "log4j";
    String propsPath = this.getClass().getClassLoader().getResource(".").getPath();
    File f = new File(propsPath, propsFile + ".properties");
    if(!f.exists()){
        System.out.println("File not found!!!!");
        System.exit(-1);
    }
    bundle = ResourceBundle.getBundle(propsFile);
    System.out.println(bundle.getString("log4j.rootLogger"));
}

public static void main(String[] args) {
     new PropertiesExist();         
}

これにより、ログ ファイル log4.properties が検索されます。見つからない場合、プログラムは終了します。

于 2010-01-13T11:25:23.730 に答える