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?
java
file-io
inputstream
Veera
quelle
quelle
InputStream is = new ClassPathResource("/path/to/your/file").getInputStream()
ClassLoader.class.getResourceAsStream("/path/file.ext");
quelle
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.quelle
ClassLoader.class.getResourceAsStream("/path/to/your/xml")
und stellen Sie sicher, dass Ihr Kompilierungsskript die XML-Datei an die Stelle in Ihrem CLASSPATH kopiert.quelle
someClassWithinYourSourceDir.getClass (). getResourceAsStream ();
quelle
getClass().getResourceAsStream("...")
etc.Einige der "getResourceAsStream ()" - Optionen in dieser Antwort haben bei mir nicht funktioniert, aber diese hat funktioniert:
SomeClassWithinYourSourceDir.class.getClassLoader (). GetResourceAsStream ("yourResource");
quelle
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').
quelle
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.