web-dev-qa-db-ja.com

ClassLoader getResourceAsStreamがnullを返します

私のプロジェクトのディレクトリ構造(Eclipse):

MyProject/
    src/        --> "source directory" on Eclipse's classpath/buildpath
        com.me.myapp
            Driver
            myconfig.txt

Driverには、次のコードがあります。

public class Driver {
    public static void main(String[] args) {
        InputStream is = ClassLoader.getSystemClassLoader.getResourceAsStream("myconfig.txt");
        if(is == null)
            System.out.println("input stream is null");
        else
            System.out.println("input stream is NOT null :-)");
    }
}

これを実行すると、次のコンソール出力が得られます。

input stream is null

なぜ?私はmyconfig.txt間違った場所に? ClassLoader APIを誤って使用していますか?他に何か?前もって感謝します!

28
IAmYourFaja

同じパッケージ内にある場合

_InputStream is = Driver.class.getResourceAsStream("myconfig.txt");
_

あなたがそれを持っている方法

_InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("myconfig.txt");
_

クラスパスのルートでファイルを探しています。使用できます

_InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("com/me/myapp/myconfig.txt");
_

検索のルールについては、 javadoc of ClassLoader#getResource(String) および javadoc of Class#getResource(String) で説明されています。

43

Mavenを使用している場合は、[〜#〜] build [〜#〜]タグの下に次の行を追加します。サーバーでwebappを実行しているときにこのエラーが発生しますが、サーバー上のリソースへの参照がありません。

したがって、これをPOM.xmlに追加して、魔法を見てください。

<resources>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
        <includes>
            <include>fileName.txt</include>
        </includes>
    </resource>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
        <includes>
            <include>fileName.wsdl</include>
        </includes>
    </resource>
</resources>

楽しむ。!!!

10
Hitesh