我正在尝试创建一个实用程序类ReadPropertyUtil.java
,用于从属性文件中读取数据。虽然我的类位于util目录下,但我的skyscrapper.properties
文件放在其他目录中。
但是,当我尝试使用[ResourceBundle][1]
访问属性时,我得到异常,无法加载该包。
下面是我如何阅读属性的代码,以及显示我的目录结构的图像。
ReadPropertiesUtil.java
/**
* Properties file name.
*/
private static final String FILENAME = "skyscrapper";
/**
* Resource bundle.
*/
private static ResourceBundle resourceBundle = ResourceBundle.getBundle(FILENAME);
/**
* Method to read the property value.
*
* @param key
* @return
*/
public static String getProperty(final String key) {
String str = null;
if (resourceBundle != null) {
str = resourceBundle.getString(key);
LOGGER.debug("Value found: " + str + " for key: " + key);
} else {
LOGGER.debug("Properties file was not loaded correctly!!");
}
return str;
}
目录结构
此行显示错误private static ResourceBundle resourceBundle = ResourceBundle.getBundle(FILENAME);
我无法理解为什么这不起作用,解决方案是什么。 src
文件夹已完全添加到构建路径中。
答案 0 :(得分:32)
尝试使用完全限定名称作为资源:
private static final String FILENAME = "resources/skyscrapper";
答案 1 :(得分:16)
ResourceBundle无法加载文件?您需要先将文件放入资源中。如何加载到FileInputStream然后加载PropertyResourceBundle
FileInputStream fis = new FileInputStream("skyscrapper.properties");
resourceBundle = new PropertyResourceBundle(fis);
或者如果你需要特定于语言环境的代码,这样的东西应该可以工作
File file = new File("skyscrapper.properties");
URL[] urls = {file.toURI().toURL()};
ClassLoader loader = new URLClassLoader(urls);
ResourceBundle rb = ResourceBundle.getBundle("skyscrapper", Locale.getDefault(), loader);
答案 2 :(得分:6)
使用资源
ResourceBundle rb = ResourceBundle.getBundle("com//sudeep//internationalization//MyApp",locale);
or
ResourceBundle rb = ResourceBundle.getBundle("com.sudeep.internationalization.MyApp",locale);
只要给出合格的路径..它为我工作!!!
答案 3 :(得分:5)
您应该设置不带.properties
扩展名的属性文件名,
它适用于我:))
答案 4 :(得分:2)
我想分享我在构建项目中使用Ant的经验,* .properties文件应该显式复制。这是因为Ant默认情况下不会将* .properties文件编译到构建工作目录中(javac只是忽略* .properties)。例如:
<target name="compile" depends="init">
<javac destdir="${dst}" srcdir="${src}" debug="on" encoding="utf-8" includeantruntime="false">
<include name="com/example/**" />
<classpath refid="libs" />
</javac>
<copy todir="${dst}">
<fileset dir="${src}" includes="**/*.properties" />
</copy>
</target>
<target name="jars" depends="compile">
<jar jarfile="${app_jar}" basedir="${dst}" includes="com/example/**/*.*" />
</target>
请注意'compile'目标下的'copy'部分,它会将* .properties文件复制到构建工作目录中。如果没有'copy'部分,jar文件将不包含属性文件,那么您可能会遇到java.util.MissingResourceException。
答案 5 :(得分:1)
使用Eclipse和Windows:
你必须复制2个文件 - xxxPROJECTxxx.properties - log4j.properties 这里:C:\ Eclipse \ CONTENER \ TOMCAT \ apache-tomcat-7 \ lib
答案 6 :(得分:0)
我刚刚意识到我的错误是在我的属性文件的命名约定中引起的。当我使用xxxx.xxxx.properties时出现错误:
java.util.MissingResourceException:无法找到基本名称'property_file name'的包,locale en_US
将其更改为xxx-xxxx.properties就像魅力一样。希望我帮助别人!
答案 7 :(得分:0)
只需右键单击Eclipse中的项目文件,然后在构建路径中选择“用作源文件夹” ...对我有用
答案 8 :(得分:0)
最简单的代码是将属性文件保存在资源文件夹中,即src / main / resource或src / test / resource中。然后使用以下代码读取属性文件:
public class Utilities {
static {
rb1 = ResourceBundle.getBundle("fileNameWithoutExtension");
// do not use .properties extension
}
public static String getConfigProperties(String keyString) {
return rb1.getString(keyString);
}
}