L'obtention de la inputstream à partir d'un chemin de classe de ressource (fichier XML)
Dans les applications web Java, Suppose que si je veux obtenir le InputStream d'un fichier XML, qui est placé dans le chemin de classe (c'est à dire à l'intérieur de la sources dossier), comment dois-je faire?
Vous devez vous connecter pour publier un commentaire.
chargeur de classe.getResourceAsStream()
.Comme indiqué dans le commentaire ci-dessous, si vous êtes dans un environnement multi-
ClassLoader
de l'environnement (comme les tests unitaires, webapps, etc.) vous pouvez avoir besoin d'utiliserThread.currentThread().getContextClassLoader()
. Voir http://stackoverflow.com/questions/2308188/getresourceasstream-vs-fileinputstream/2308388#comment21307593_2308388.InputStream is = new ClassPathResource("/path/to/your/file").getInputStream()
java.lang.NullPointerException: null
, et de la façon la plus simple je pense estnew ClassPathResource("/path/to/your/file").getInputStream()
Cela dépend d'où exactement le fichier XML est. Est-il dans le dossier sources (dans le "package par défaut" ou la "racine"), ou dans le même dossier que la classe?
Pour premier cas, vous devez utiliser "
/file.xml
" (notez le slash) pour trouver le fichier et il n'est pas question que la classe que vous utilisez pour essayer de le localiser.Si le fichier XML est à côté d'une certaine classe,
SomeClass.class.getResourceAsStream()
avec juste le nom de fichier est le chemin à parcourir.ClassLoader.class.getResourceAsStream("/path/to/your/xml")
et assurez-vous que votre compiler le script copie le fichier xml où dans votre CLASSPATH.someClassWithinYourSourceDir.getClass().getResourceAsStream();
getClass().getResourceAsStream("...")
etc.Une partie de la "getResourceAsStream()" dans cette réponse n'a pas fonctionné pour moi, mais il n':
SomeClassWithinYourSourceDir.classe.getClassLoader().getResourceAsStream("yourResource");
J'ai essayé la solution proposée et une barre oblique dans le nom de fichier ne fonctionne pas pour moi, par exemple: ...().getResourceAsStream("/mon.les propriétés"); la valeur null est retournée
Retrait de la barre oblique travaillé: ....getResourceAsStream("mon.les propriétés");
Voici de la doc de l'API:
Avant que la délégation d'une absolue nom de la ressource est construit à partir du nom de ressource donné à l'aide de cet algorithme:
null
sans la/
. En ajoutant le caractère de barre oblique a fonctionné pour moi. Il doit y avoir une autre différence entre @hussein-terek et de mon installation et votre configuration.