JavaのWebプロジェクトのルートにプロパティファイルを配置しました。Struts2を使用しています。コードがプロパティファイルを読み取れません。プロパティファイルはどこに保管すればよいですか?
デフォルトのパスを確認しました。これは、Eclipseがインストールされている場所です。しかし、私はそのシステムがプロジェクトフォルダ自体からファイルを読み取る必要があります。
JavaのWebプロジェクトのルートにプロパティファイルを配置しました。Struts2を使用しています。コードがプロパティファイルを読み取れません。プロパティファイルはどこに保管すればよいですか?
デフォルトのパスを確認しました。これは、Eclipseがインストールされている場所です。しかし、私はそのシステムがプロジェクトフォルダ自体からファイルを読み取る必要があります。
プロパティ ファイルは通常、次のいずれかになります。
/WEB-INF
どちらがより適切かは、ニーズによって異なります。クラスパスベースのファイルでは、設定なしでデフォルト プロパティ ファイルをバンドルできます。たとえば、Log4J はlog4j.properties
デフォルトの構成ファイルとしてクラスパスのルートを探します。
これは時折問題を引き起こす可能性がありますが、クラスの読み込み順序によっては、システムが「不要な」構成ファイルを取得する場合があります。自分で構成する方が望ましい場合もあります。私はまだクラスパスを使用する傾向がありますが、構成ファイルも一般的にWEB-INF
. どちらの方法も機能し、どちらのスタイルも JNDI、init パラメータ、環境変数、またはシステム変数 (例: -D
) を使用して構成できます。
通常、プロパティ ファイルをsrc
フォルダーに配置して、アプリケーションを実行したときにアプリケーションがプロパティ ファイルを読み取ることができるようにする必要があります。プロパティ ファイルは、src
フォルダーからフォルダーにコピーされclasses
ます。あなたが知っている限り、classes
フォルダーはプロジェクト出力フォルダーでなければならないので、フォルダーとして使用され、classpath
アプリケーションはプロパティファイルがclasspath
.
クラスパスからプロパティを取得する例:
Properties prop = new Properties();
try {
//load properties from the class path
prop.load(this.getClass().getClassLoader().getResourceAsStream("myproperties.properties"));
//get the property
System.out.println(prop.getProperty("mykey"));
} catch (IOException ex) {
ex.printStackTrace();
throw ex;
}
ただし、ファイルシステム上のファイルへのパスがわかっている場合は、プロパティをロードできます。この場合は、
prop.load(new FileInputStream("/path/to/myproperties.properties"));
あなたが話している場合struts.properties
フレームワークは、ニーズに合わせて変更できる多くのプロパティを使用します。これらのプロパティーを変更するには、struts.properties ファイルでプロパティーのキーと値を指定します。プロパティ ファイルはクラスパスのどこにでも配置できますが、通常は /WEB-INF/classes の下にあります。
メッセージ リソースのプロパティを探している場合は、 で構成できstruts.properties
ますstruts.xml
。
<constant name="struts.custom.i18n.resources" value="path/to/resources/MessageResources"/>
値はファイルパスですsrc/path/to/resources/MessageResources.properties
アプリケーションを構成する適切な方法を探している場合は、EasyConfを使用することを検討してください。
myPropertyFile.properties ファイルを src フォルダーに保持し (プロジェクトをビルドした後、WEB-INF/classes にあります)、次のコードを使用してアクセスします。
Properties prop = new Properties();
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
prop.load(classLoader.getResourceAsStream("/myPropertyFile.properties"));