我想检查 ResourceBundle 的存在而不实际加载它。
通常,我使用的是 Guice,在初始化时,我想检查是否存在,而在执行时,我想加载它。如果捆绑包不存在,我想要一份关于 RB 不存在的早期报告。
如果可以获取用于特定 ResourceBundle 的 ResourceBundle.Control 实例,那么获取构建实际资源名称的基本信息(使用 toBundleName() 和 toResourceName())将没有问题,但情况并非如此那个水平。
编辑:
好的,我找到了方法。我将创建一个可扩展的 ResourceBundle.Control(使用自定义 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;
}
}