web-dev-qa-db-ja.com

java.util.MissingResourceException:ベース名 'property_file name'、ロケールen_USのバンドルが見つかりません

プロパティファイルからデータを読み取るためのユーティリティクラス_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フォルダーは既にビルドパスに完全に追加されています。

37
roger_that

リソースに対して完全修飾名を試してください:

private static final String FILENAME = "resources/skyscrapper";
32
Bludzee

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);
18
Ross Drew

のようなリソースを使用します

ResourceBundle rb = ResourceBundle.getBundle("com//sudeep//internationalization//MyApp",locale);
or
ResourceBundle rb = ResourceBundle.getBundle("com.sudeep.internationalization.MyApp",locale);

資格のあるパスを指定するだけです。

6

プロパティファイル名は.properties拡張子なしで設定する必要があります。私にとっては正しく機能します:)

4
Alireza Alallah

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>

「コンパイル」ターゲットの下の「コピー」セクションは、*。propertiesファイルをビルド作業ディレクトリに複製することに注意してください。 「コピー」セクションがないと、jarファイルにはプロパティファイルが含まれず、Java.util.MissingResourceExceptionが発生する可能性があります。

2
peihan

EclipseとWindowsの場合:

2つのファイル-xxxPROJECTxxx.properties-log4j.propertiesをここにコピーする必要があります:C:\ Eclipse\CONTENER\Tomcat\Apache-Tomcat-7\lib

1
TontonZition

私のエラーは、プロパティファイルの命名規則に原因があることに気づきました。 xxxx.xxxx.propertiesを使用すると、エラーが発生しました:

Java.util.MissingResourceException:ベース名 'property_file name'、ロケールen_USのバンドルが見つかりません

それをxxx-xxxx.propertiesのようなものに変更すると、魅力のように機能します。私が誰かを助けることを願っています!

0
Etch

eclipseでプロジェクトファイルを右クリックし、ビルドパスで[ソースフォルダーとして使用]を選択します。