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!
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)
.
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.!!!