java.util.MissingResourceException:找不到基本名称'property_file name'的包,locale en_US

时间:2013-11-22 10:01:22

标签: java properties resourcebundle

我正在尝试创建一个实用程序类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;
}

目录结构

enter image description here

此行显示错误private static ResourceBundle resourceBundle = ResourceBundle.getBundle(FILENAME);

我无法理解为什么这不起作用,解决方案是什么。 src文件夹已完全添加到构建路径中。

9 个答案:

答案 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);
    }
}