2011-12-17 9 views
1

java.util.Propertiesクラスを使用してファイルに設定を保存しているアプリケーションがあります。 私はこの方法でファイルを読み込む:コマンドラインで.jarを実行しているときにアクセスできない

props.load(new FileInputStream("c2c_stngs.prop")); 

すべてがIDEにうまく機能は、また、.jarファイルに構築し、ダブルクリックした後に動作します。私は、このようなコマンドラインでそれを実行しようとすると

私の問題が始まる:

java -jar c:\Works\project.jar 

これは、エラーがスローされます:

java.io.FileNotFoundException: c2c_stngs.prop (The system cannot find the file specified) 

私はと同じフォルダにc2c_stngs.propファイルを持っています。 jarファイル。 また、cmdを管理者として実行しようとしましたが、それでも同じです。

+2

プロパティは一定のままであるか、ユーザー(またはアプリケーション)によって編集可能かどうかを確認しますか? [この回答]も参照してください(http://stackoverflow.com/questions/5052311/how-can-a-java-program-use-files-inside-the-jar-for-read-and-write/5052359#5052359 )を使用して、編集可能なプロパティを備えたより良い戦略を作成します。 –

答えて

3

これは、パス経由でjarにアクセスしているためです。動作しますが、あなたの問題への解決策ではないはずです

C: 
CD \Works 
java -jar project.jar 

:ような何かにあなたのスクリプトを変更してみてください。 jarファイルが存在する場所に常にプロパティファイルが存在することが予想される場合、jarファイルを見つける必要があります。それについてはFinding the path to a jar from a Class inside it?を参照してください。以下のような

何か:あなたのプロパティファイルをロードするように相対パスを使用している

File propertiesFile = new File("c2c_stngs.prop"); 
if (!propertiesFile.exists()) { 
    // Wont work 'cause getLocation returns a URL but you get my drift. 
    propertiesFile = new File(getLocation(this.class), propertiesFile); 
} 
+0

ありがとう、それは簡単でした!あなたは信じられません。私はregeditを調べて、.jarをダブルクリックして動作させる余分な議論があるかどうか調べ始めます) –

2

。これは、プログラムが開始するディレクトリにプロパティファイルが存在することをコードで期待していることを意味します。したがって、javaを起動するときにc:\にいる場合、ファイルはc:\でなければならず、jarがあるディレクトリではありません。

プロパティがread_onlyの場合、ファイルはjarファイルに存在し、Class.getResourceAsStream()を使用してクラスパスからロードする必要があります。読み取り/書き込みの場合は、絶対パスを使用してファイルをロードします。

+0

ありがとう、私はそれについて考えましたが、私はよく書く必要があります。私のデプロイメントスクリプトはjarファイルを特定のディレクトリにコピーしているので、パスをハードコードしただけです。 –