2011-11-13 10 views
0

mavenを使用してデスクトップJavaアプリケーションを開発しています。 実行中に検索する必要のある* .propertiesファイル(src/resources/application.properties)があります。.propertiesの取得方法

private Properties applicationProperties; 
applicationProperties.load(new BufferedInputStream(new FileInputStream("src/resources/application.properties"))); 

私はIDEから直接自分のアプリケーションを実行する場合、これは動作します: 唯一のものは使用することがある私の心に来ます。 私はoutpout階層をクリアに保ちたいので、リソースフォルダdircetlyをターゲットフォルダにコピーするようにmavenを設定しました(これは出力アプリケーションのベースディレクトリです)。この方法では、application.propertiesファイルはロードされません(target/resources/application.propertiesは存在しますが、target/src/resources/application.propertiesは含まれません)。

リソースを管理するための最良の方法は、IDEからデバッグしてビルドされたjarファイルを直接実行するときに機能するためです。

答えて

1

ファイルがsrcフォルダ内にあるとは思わない - 実行時には存在しない。プロパティファイルは/binです。しかし、どちらにも依存しないでください。 FileInputStreamは絶対パスのみをとるためです。

あなたはクラスパス・相対パス、使用が必要な場合:

InputStream is = YourClass.class.getResourceAsStream("/a.properties")` 

あなたはクラスパスからプロパティファイルをロードするのではなくすべきである

+0

ソリューションありがとうございました – psylocybe

1

(Mavenのは、クラスパスのルートに/src/main/resourcesからファイルを送信します)明示的なファイルシステムの場所から:

applicationProperties.load(new BufferedInputStream(this.getClass().getResourceAsStream("/application.properties"); 

あなたのクラスパスにresourcesディレクトリを含めるようにIDEが設定されている限りMavenのデフォルトである)、これはIDE内で実行しているかどうかに関わらず、アーカイブをパッケージ化するときにmavenがリソースを適切な場所にコピーするので動作します。

+0

ありがとう。それは便利だった – psylocybe

関連する問題