ClassLoader getResourceAsStream retourne null

structure du répertoire de mon projet (dans Eclipse):

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

Driver, j'ai le code suivant:

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 :-)");
    }
}

Lorsque j'exécute ce je obtenir la sortie de la console:

input stream is null

Pourquoi? ai-je placé myconfig.txt dans un mauvais endroit? Est-ce que J'utilise mal L'API ClassLoader? Quelque chose d'autre? Merci à l'avance!

25
demandé sur IAmYourFaja 2013-09-26 22:02:27

2 réponses

Si c'est dans le même package

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

La façon dont vous l'avez

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

il cherche le fichier dans la racine du classpath. Vous pouvez utiliser

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

les règles de recherche sont expliquées dans le javadoc de ClassLoader#getResource(String) et javadoc de Class#getResource(String).

38
répondu Sotirios Delimanolis 2013-09-26 18:08:04

Si vous travaillez avec Maven, ajoutez les lignes suivantes dans balise. Vous obtenez cette erreur lorsque vous exécutez le webapp sur le serveur, mais il n'y a aucune référence aux ressources sur le serveur.

alors, ajoutez ce qui suit dans votre POM.xml et voir la magie.

<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>

Amusez-Vous Bien.!!!

7
répondu Hitesh 2015-07-23 15:52:30