wake-up-neo.com

Den Inputstream von einer Classpath-Ressource (XML-Datei) abrufen

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?

69
Veera

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 .

86
cletus
ClassLoader.class.getResourceAsStream("/path/file.ext");
29
jkarretero

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.

12
Aaron Digulla

ClassLoader.class.getResourceAsStream("/path/to/your/xml") und vergewissern Sie sich, dass Ihr Kompilierungsskript die XML-Datei an die Stelle in Ihrem CLASSPATH kopiert. 

11
Clint

someClassWithinYourSourceDir.getClass (). getResourceAsStream ();

6
mP.

Einige der "getResourceAsStream ()" - Optionen in dieser Antwort haben für mich nicht funktioniert, aber diese hat funktioniert:

SomeClassWithinYourSourceDir.class.getClassLoader (). GetResourceAsStream ("yourResource");

4
user64141

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'). 
0
Striker