java中ResourceBundle的查询
直接由此: 否则,getBundle将尝试使用查找属性资源文件 生成的属性文件名。它从 通过将所有“.”字符替换为“/”和 追加字符串“.properties”。它试图找到一个“资源” 使用ClassLoader.getResource使用此名称java中ResourceBundle的查询,java,io,resourcebundle,Java,Io,Resourcebundle,直接由此: 否则,getBundle将尝试使用查找属性资源文件 生成的属性文件名。它从 通过将所有“.”字符替换为“/”和 追加字符串“.properties”。它试图找到一个“资源” 使用ClassLoader.getResource使用此名称 将所有“.”字符替换为“/”是什么意思? 附言:我同意在结尾追加.properties。假设您有一个名为 com.yourgroup.bundles 包含名为 hello_en_US.properties 您必须指定以下任一项才能加载捆绑包 Res
将所有“.”字符替换为“/”
是什么意思?
附言:我同意在结尾追加.properties。假设您有一个名为
com.yourgroup.bundles
包含名为
hello_en_US.properties
您必须指定以下任一项才能加载捆绑包
ResourceBundle bundle = ResourceBundle.getBundle("com.yourgroup.bundles.hello");
ResourceBundle bundle = ResourceBundle.getBundle("com/yourgroup/bundles/hello");
基本上,javadoc告诉您如何将传递给getBundle
方法的参数转换为类路径上的资源。对我来说,默认的语言环境是en_US
,所以
com.yourgroup.bundles.hello
转化为
com/yourgroup/bundles/hello_en_US.properties
然后,它可以使用ClassLoader
查找该资源
如果正确映射其名称,它返回的ResourceBundle
实现实际上可能是一个自定义类。按照javadoc进行操作。否则,它只是一个Properties
资源包
神奇发生在ResourceBundle#newBundle(…)
这很简单
public final String toResourceName(String bundleName, String suffix) {
StringBuilder sb = new StringBuilder(bundleName.length() + 1 + suffix.length());
sb.append(bundleName.replace('.', '/')).append('.').append(suffix);
return sb.toString();
}
....
URL url = classLoader.getResource(resourceName);
...
bundle = new PropertyResourceBundle(stream); // stream comes from url
public final String toResourceName(String bundleName, String suffix) {
StringBuilder sb = new StringBuilder(bundleName.length() + 1 + suffix.length());
sb.append(bundleName.replace('.', '/')).append('.').append(suffix);
return sb.toString();
}
....
URL url = classLoader.getResource(resourceName);
...
bundle = new PropertyResourceBundle(stream); // stream comes from url