In Java - Web - Anwendung, Nehmen wir an, wenn ich die Input einer XML - Datei erhalten möchten, die in der CLASSPATH (dh innerhalb der platziert Quellen - Ordner), wie kann ich es tun?
Antworten:
ClassLoader.getResourceAsStream()
.
Wie im Kommentar unten angegeben, ClassLoader
müssen Sie möglicherweise mehrere Umgebungen verwenden (z. B. Unit-Tests, Webanwendungen usw.) Thread.currentThread().getContextClassLoader()
. Siehe http://stackoverflow.com/questions/2308188/getresourceasstream-vs-fileinputstream/2308388#comment21307593_2308388 .
InputStream is = new ClassPathResource("/path/to/your/file").getInputStream()
ClassLoader.class.getResourceAsStream("/path/file.ext");
java.lang.NullPointerException: null
new ClassPathResource("/path/to/your/file").getInputStream()
Das hängt davon ab, wo genau sich die XML-Datei befindet. Befindet es sich im Quellordner (im "Standardpaket" oder im "Stammverzeichnis") oder im selben Ordner wie die Klasse?
Im ersten Fall müssen Sie " /file.xml
" (beachten Sie den führenden Schrägstrich) verwenden, um die Datei zu finden, und es spielt keine Rolle, mit welcher Klasse Sie versuchen, sie zu finden.
Wenn sich die XML-Datei neben einer Klasse befindet, ist SomeClass.class.getResourceAsStream()
nur der Dateiname der richtige Weg.
someClassWithinYourSourceDir.getClass (). getResourceAsStream ();
getClass().getResourceAsStream("...")
etc.
Ich habe die vorgeschlagene Lösung ausprobiert und ein Schrägstrich im Dateinamen hat bei mir nicht funktioniert. Beispiel: ... (). GetResourceAsStream ("/ my.properties"); null wurde zurückgegeben
Das Entfernen des Schrägstrichs hat funktioniert: .... getResourceAsStream ("my.properties");
Hier ist von der doc-API: Vor der Delegierung wird mit diesem Algorithmus aus dem angegebenen Ressourcennamen ein absoluter Ressourcenname erstellt:
If the name begins with a '/' ('\u002f'), then the absolute name of the resource is the portion of the name following the '/'.
Otherwise, the absolute name is of the following form:
modified_package_name/name
Where the modified_package_name is the package name of this object with '/' substituted for '.' ('\u002e').
null
ohne die /
. Das Hinzufügen des Schrägstrichs hat bei mir funktioniert. Es muss einen anderen Unterschied zwischen @ hussein-terek und meinem Setup und Ihrem Setup geben.