0

こんにちは、構成ファイルを読み取る小さなプログラムを作成しました。このファイルは、実際の jar ファイルの外部に保存されます。実際にはjarfileと同じレベルです。実際のディレクトリ (つまり、D:\test\java -jar name.jar argument0 argument1) のコマンドラインからプログラムを起動すると、完全に実行されます。

しかし、別の場所からプログラムを実行しようとすると、実際のディレクトリで filenotfound 例外が発生します (つまり、D:\java -jar D:\test\name.jar argument0 argument1)。

基本的な機能は動作しているようですが、何が間違っていますか?

コードの一部を要求したとおり:

public LoadConfig() {
    Properties properties = new Properties();

    try {
        // load the properties file
        properties.load(new FileInputStream("ibantools.config.properties"));

    } catch (IOException ex) {
        ex.printStackTrace();
    } // end catch

    // get the actual values, if the file can't be read it will use the default values.
    this.environment = properties.getProperty("application.environment","tst");
    this.cbc = properties.getProperty("check.bankcode","true");
    this.bankcodefile = properties.getProperty("check.bankcodefile","bankcodes.txt");
} // end loadconfig

フォルダは次のようになります。 ここに画像の説明を入力

これは機能します: ここに画像の説明を入力

これはしません: ここに画像の説明を入力

jar にはテキスト ファイルが含まれていません。

4

2 に答える 2

2

File、などの文字列/パス コンストラクタを使用してファイルを読み取る場合FileInpustream、相対パスは作業ディレクトリ (プログラムを開始したディレクトリ) から派生します。

Jar からファイルを読み取る場合、そのファイルは jar の外部にあり、少なくとも 2 つのオプションがあります。

  1. 絶対パスを指定します。D:/blah/foo/bar
  2. ファイルが配置されているディレクトリをクラスパスの一部にして、使用しますthis.getClass().getClassLoader().getResourceAsStream("myfile")

後者は、おそらく、アプリケーションの場所に対する相対パスに格納されている構成ファイルを読み取るのにより適しています。

于 2013-06-26T13:54:40.520 に答える