26

プロパティファイルを読み込もうとしています。これが私の構造です

ディレクトリ構造

今、test.properties ファイルを読み込もうとしています。しかし、私はヌルになっています。ここで私はどのようにやっていますか

public class Test {

    String workingDir = System.getProperty("user.dir");
    System.out.println("Current working directory : " + workingDir);

    File temp = new File(workingDir + "\\" + "test.properties");
    String absolutePath = temp.getAbsolutePath();
    System.out.println("File path : " + absolutePath);

    Properties properties = null;

    try {
        properties = new Properties();
        InputStream resourceAsStream =  Test.class.getClassLoader().getResourceAsStream(absolutePath);
        if (resourceAsStream != null) {
            properties.load(resourceAsStream);
        }


    } catch (IOException e) {
        e.printStackTrace();
    }

    System.exit(0);

} //end of class Test

このプログラムは印刷します

Current working directory : D:\Personal Work\eclipse 32 Bit\workspace\Spring Integration\LS360BatchImportIntegration
File path : D:\Personal Work\eclipse 32 Bit\workspace\Spring Integration\LS360BatchImportIntegration\test.properties

しかし、このパスからプロパティ ファイルをロードしていません。そこに存在しますが。なぜ私は null になっているのですか?

ありがとう

編集 - - - - - - - - - - - - - - - -

String workingDir = System.getProperty("user.dir");
System.out.println("Current working directory : " + workingDir);

File temp = new File(workingDir, "test.properties");

String absolutePath = temp.getAbsolutePath();
System.out.println("File path : " + absolutePath);

try {
    properties = new Properties();
    InputStream resourceAsStream =  new FileInputStream(temp);
    if (resourceAsStream != null) {
        properties.load(resourceAsStream);
    }   
} catch (IOException e) {
    e.printStackTrace();
}

System.exit(0);

Current working directory : D:\Personal Work\eclipse 32 Bit\workspace\Spring Integration\LS360BatchImportIntegration
File path : D:\Personal Work\eclipse 32 Bit\workspace\Spring Integration\LS360BatchImportIntegration\test.properties
java.io.FileNotFoundException: D:\Personal Work\eclipse 32 Bit\workspace\Spring Integration\LS360BatchImportIntegration\test.properties (The system cannot find the file specified)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(Unknown Source)
at com.softech.ls360.integration.BatchImport.main(BatchImport.java:57)
4

6 に答える 6

28

ああああ...ここにはいくつかの問題があります:

1) 最初に提供されたコード スニペットではClassLoader、リソース ファイルの読み込みに を使用しています。これは確かに良い決断です。ただし、getResourceAsStreamメソッドには「クラスパス相対」名が必要です。絶対パスを指定しています。

2) 2 番目のコード スニペット (編集後) では、ファイル "D:...\LS360BatchImportIntegration\test.properties" が見つかりません。スクリーンショットによると、ファイルは「D:...\LS360AutomatedRegulatorsReportingService\test.properties」である必要があります。これは別のディレクトリです。

残念ながら、あなたの説明はあなたのマシンでの調査結果と最新のものではありません.

しかし、合理的な解決策に移りましょう。

1) Eclipse プロジェクト (スクリーンショットは、Eclipse を使用していることを示しています) で、「src」ディレクトリと同じ深さに「resources」という名前の新しいディレクトリを作成します。そこにプロパティ ファイルをコピー (または移動) します。

2) この新しいディレクトリは、「ビルド パス」に配置する必要があります。[パッケージ エクスプローラー] または [プロジェクト エクスプローラー] ビューでディレクトリを右クリックし、[ビルド パス]、[ソース フォルダーとして使用] の順に選択します。注: このビルド パスは、実行時のプロジェクトのクラス パスになります。

3) リソース ディレクトリはクラス パスの一部になり、プロパティ ファイルが含まれているため、getResourceAsStream("test.properties").

編集

Maven (pom.xml ファイル) も使用していることがわかります。Maven では、そのようなリソース ディレクトリがデフォルトで存在し、ビルド パスの一部になっています。「src/main/resources」です。なら、これだけ使え。

于 2013-08-05T09:43:26.807 に答える
1

でファイルが見つからないという同様の問題がありましたgetResourceAsStream()。ファイルはリソース フォルダ ( src/main/resources) にありましたが、まだ見つかりません。

Eclipse Package Explorer に入り、リソースフォルダーを「更新」すると、問題は解決しました。ディレクトリにありましたが、フォルダーが更新されるまで (フォルダーを右クリックして [更新] を選択)、Eclipse はそれを認識しませんでした。

于 2016-03-10T11:15:22.353 に答える
0

にファイル パスを渡していますがgetResourceAsStream(String name)nameこれはファイル パスではなくクラス パスです...

ファイルがクラスパス上にあることを確認するか、FileInputStream代わりに a を使用できます。

于 2013-08-05T07:53:00.827 に答える