5

我想检查 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;
  }
}
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()以便下次再次加载它们。

这种情况发生一次(在初始化时),它不是一个繁重的操作,所以不会有问题。

或者您可以简单地尝试查找资源是否存在于类路径中。例如,备用 .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 回答