実際にロードせずに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;
}
}