0

プロパティ ファイルを読み込もうとしています。ロードしようとしているクラスと同じディレクトリに
プロパティファイルがあります。 例:

package com.classes.internal;   
public class ClassA {  

    private static String PFILE = "config.properties";  


    private static void methodA(){  
    //do stuff  
        Properties properties = null;  
        try{  
            properties = new Properties();  
            properties.load(new FileInputStream(PFILE));  
            //properties.load(new ClassA().getClass().getResourceAsStream(PFILE)); --> Does not work either   

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


    }   

またconfig.properties、ファイルは com\classes\internal dir にあります

しかし、FileNotFoundExceptionまたはを取得しますjava.lang.NullPointerException(最初の行ではなくコメントアウトされた行を使用する場合)

ここで何が間違っていますか?私は何を誤解していますか?

4

6 に答える 6

2

ファイルは、クラスファイルがあるディレクトリではなく、実行元のディレクトリにある必要があります。

したがって、ディレクトリ構造がある場合

プロジェクト/com/クラス/内部

そして、あなたはコマンドを実行します

Project$ java com.classes.internal.SomeClass

JVM は「Project」ディレクトリで「config.properties」ファイルを探します。

于 2012-04-06T07:10:59.347 に答える
0

プログラムの作業ディレクトリが com\classes\internal にないと思います。この相対パスを渡すようにしてください:

com\classes\internal\config.properties

または絶対パス。このように現在の作業ディレクトリを取得できます

String currentDir = new File(".").getAbsolutePath();
于 2012-04-06T07:11:26.760 に答える
0

以下の行は、作業ディレクトリ (FrankieTheKneeMan の例では "Project" フォルダー。Tomcat でコードを実行している場合は、$Tomcat/bin/ からの可能性が高い) に関連するファイルを読み込みます。

properties.load(new FileInputStream(PFILE));

以下の行では、クラスパスに関連するファイルをロードしています。したがって、「config.properties」は、「com/classes/internal/」ではなく、「com」フォルダーを含むディレクトリを参照します。

properties.load(new ClassA().getClass().getResourceAsStream(PFILE));

したがって、クラスパスからロードするか、作業ディレクトリからロードするかを決定する必要があります。

于 2012-04-06T07:50:24.323 に答える
0
properties.load(this.getClass().getResourceAsStream(
    "/com/classes/internal/" + PFILE));
于 2012-04-06T07:20:08.670 に答える
0

例。私はEclipseプロジェクト構造を使用していますが、とにかく写真が撮れることを願っています:

//File in Project/src/com/classes/internal/config.properties
InputStream in = ClassA.class.getResourceAsStream("config.properties");
Properties p = new Properties();
try {
   p.load(in);
} catch(IOException e) {
   e.printStackTrace();
}

ファイルをパッケージの外に置くことにした場合:

//File in Project/src/config.properties
InputStream in = ClassA.class.getClassLoader().getResourceAsStream("config.properties");

getResourceAsStreamファイルをクラスパスに含める必要があることに注意してください。

于 2012-04-06T08:06:31.947 に答える
0

ソース フォルダーに構成パッケージを直接作成し、その中にconfig.propertiesファイルを配置します。アプリケーションをビルドすると、/WEB-INF/classes/config/config.properties に移動します。

次に、次のコードを使用してプロパティ ファイルにアクセスできます。

    Properties prop = new Properties();
    String propFileName = "/config/config.properties";

    InputStream input = null;

    input = ClassA.class.getResourceAsStream(propFileName);
    prop.load(input);
于 2014-10-14T06:29:11.723 に答える