我想检查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;
  }
}

最佳答案

如果默认捆绑包必须存在,则可以执行以下操作:

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

它将返回该文件的URL;如果不存在,则返回null。

当然,如果您有很多的话,请使用正确的类或类加载器。

编辑:如果您有资源作为类,则还必须检查
Class.getResource("/my/path/to/bundle.class")

在Java 6中,您可以将资源束存储为XML。我不知道ResourceBundle类如何查找此资源,但我敢打赌,它的使用方式相同。

关于java - 如何检查Java ResourceBundle是否可加载而不进行加载?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2055799/

10-10 14:56