Angenommen, ich möchte in einer Java-Webanwendung den InputStream einer XML-Datei abrufen, die im CLASSPATH (d. H. Im Ordner sources ) abgelegt wird. Wie mache ich das?
ClassLoader.getResourceAsStream()
.
Wie in dem Kommentar unten angegeben, müssen Sie in einer Multi -ClassLoader
-Umgebung (z. B. Komponententests, Webanwendungen usw.) Thread.currentThread().getContextClassLoader()
verwenden. Siehe http://stackoverflow.com/questions/2308188/getresourceasstream-vs-fileinputstream/2308388##comment21307593_2308388 .
ClassLoader.class.getResourceAsStream("/path/file.ext");
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. 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.
ClassLoader.class.getResourceAsStream("/path/to/your/xml")
und vergewissern Sie sich, dass Ihr Kompilierungsskript die XML-Datei an die Stelle in Ihrem CLASSPATH kopiert.
someClassWithinYourSourceDir.getClass (). getResourceAsStream ();
Einige der "getResourceAsStream ()" - Optionen in dieser Antwort haben für mich nicht funktioniert, aber diese hat funktioniert:
SomeClassWithinYourSourceDir.class.getClassLoader (). GetResourceAsStream ("yourResource");
Ich habe die vorgeschlagene Lösung ausprobiert und der Schrägstrich im Dateinamen funktionierte für mich nicht. null wurde zurückgegeben
Das Entfernen des Schrägstrichs hat funktioniert: .... getResourceAsStream ("my.properties");
Hier ist von doc API: Vor der Delegierung wird ein absoluter Ressourcenname aus dem angegebenen Ressourcennamen mithilfe dieses Algorithmus 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').