プロパティファイルからデータを読み取るためのユーティリティクラス_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
フォルダーは既にビルドパスに完全に追加されています。
リソースに対して完全修飾名を試してください:
private static final String FILENAME = "resources/skyscrapper";
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);
のようなリソースを使用します
ResourceBundle rb = ResourceBundle.getBundle("com//sudeep//internationalization//MyApp",locale);
or
ResourceBundle rb = ResourceBundle.getBundle("com.sudeep.internationalization.MyApp",locale);
資格のあるパスを指定するだけです。
プロパティファイル名は.properties
拡張子なしで設定する必要があります。私にとっては正しく機能します:)
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が発生する可能性があります。
EclipseとWindowsの場合:
2つのファイル-xxxPROJECTxxx.properties-log4j.propertiesをここにコピーする必要があります:C:\ Eclipse\CONTENER\Tomcat\Apache-Tomcat-7\lib
私のエラーは、プロパティファイルの命名規則に原因があることに気づきました。 xxxx.xxxx.propertiesを使用すると、エラーが発生しました:
Java.util.MissingResourceException:ベース名 'property_file name'、ロケールen_USのバンドルが見つかりません
それをxxx-xxxx.propertiesのようなものに変更すると、魅力のように機能します。私が誰かを助けることを願っています!
eclipseでプロジェクトファイルを右クリックし、ビルドパスで[ソースフォルダーとして使用]を選択します。