7

JavaのWebプロジェクトのルートにプロパティファイルを配置しました。Struts2を使用しています。コードがプロパティファイルを読み取れません。プロパティファイルはどこに保管すればよいですか?

デフォルトのパスを確認しました。これは、Eclipseがインストールされている場所です。しかし、私はそのシステムがプロジェクトフォルダ自体からファイルを読み取る必要があります。

4

4 に答える 4

5

プロパティ ファイルは通常、次のいずれかになります。

  1. たとえば、リソースとして開くためのクラスパス、または
  2. クライアントがアクセスできない場所。/WEB-INF

どちらがより適切かは、ニーズによって異なります。クラスパスベースのファイルでは、設定なしでデフォルト プロパティ ファイルをバンドルできます。たとえば、Log4J はlog4j.propertiesデフォルトの構成ファイルとしてクラスパスのルートを探します。

これは時折問題を引き起こす可能性がありますが、クラスの読み込み順序によっては、システムが「不要な」構成ファイルを取得する場合があります。自分で構成する方が望ましい場合もあります。私はまだクラスパスを使用する傾向がありますが、構成ファイルも一般的にWEB-INF. どちらの方法も機能し、どちらのスタイルも JNDI、init パラメータ、環境変数、またはシステム変数 (例: -D) を使用して構成できます。

于 2013-01-29T14:39:46.810 に答える
5

通常、プロパティ ファイルを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を使用することを検討してください。

于 2013-01-29T12:09:53.653 に答える
4

myPropertyFile.properties ファイルを src フォルダーに保持し (プロジェクトをビルドした後、WEB-INF/classes にあります)、次のコードを使用してアクセスします。

  Properties prop = new Properties();
  ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
  prop.load(classLoader.getResourceAsStream("/myPropertyFile.properties"));
于 2013-01-30T12:26:38.623 に答える