2016-04-04 14 views
14

Ich versuche, meine XML-Datei zu entpacken:So erhalten Sie Dateien aus dem Ressourcenordner. Spring Framework

public Object convertFromXMLToObject(String xmlfile) throws IOException { 
    FileInputStream is = null; 
    File file = new File(String.valueOf(this.getClass().getResource("xmlToParse/companies.xml"))); 
    try { 
     is = new FileInputStream(file); 
     return getUnmarshaller().unmarshal(new StreamSource(is)); 
    } finally { 
     if (is != null) { 
      is.close(); 
     } 
    } 
} 

Aber ich bekomme diese Fehler: java.io.FileNotFoundException: null (Keine solche Datei oder das Verzeichnis)

Hier ist meine Struktur :

enter image description here

Warum kann ich keine Dateien von Ressourcen Ordner bekommen? Vielen Dank.

Aktualisierung.

Nach Refactoring,

URL url = this.getClass() getResource ("/ xmlToParse/companies.xml."); Datei file = neue Datei (url.getPath());

Ich kann einen Fehler sehen deutlicher:

java.io.FileNotFoundException: /content/ROOT.war/WEB-INF/classes/xmlToParse/companies.xml (Keine solche Datei oder das Verzeichnis)

Es wird versucht, WEB-INF/classes/ I Ordner dort hinzugefügt haben zu finden, aber immer noch diesen Fehler :(

enter image description here

+1

Versuch 'getResource ("Classpath: xmlToParse/companies.xml")' – sidgate

+0

Wont benötigen Sie eine andere "/" vor xmlToParse – LearningPhase

+0

Der Code wurde aktualisiert. Schau es dir bitte an. –

Antwort

0

Sie einen absoluten Pfad zu geben, sind wohl (so ein Laden '/' hinzufügen , wo der Ressourcenordner ist root-folder):

public Object convertFromXMLToObject(String xmlfile) throws IOException { 
    FileInputStream is = null; 
    File file = new File(String.valueOf(this.getClass().getResource("/xmlToParse/companies.xml"))); 
    try { 
     is = new FileInputStream(file); 
     return getUnmarshaller().unmarshal(new StreamSource(is)); 
    } finally { 
     if (is != null) { 
      is.close(); 
     } 
    } 
} 
+0

Der Code wurde aktualisiert. Schau es dir bitte an. –

+0

Überprüfen Sie, ob der Resources-Ordner in der Deployment-Assembly enthalten ist. –

+0

Ich denke, ich muss diesen Ordner binden ... Gibt es einen einfachen Weg? –

34

Ich hatte das selbe Problem versucht einige XML-Dateien in meine Testklassen zu laden. Wenn Sie Spring verwenden, wie Sie von Ihrer Frage aus vorschlagen können, ist der einfachste Weg, org.springframework.core.io.Resource - den bereits erwähnten Raphael Rot h zu verwenden.

Der Code ist wirklich geradlinig. deklarieren nur ein Feld des Typs org.springframework.core.io.Resource und mit Anmerkungen versehen es mit org.springframework.beans.factory.annotation.Value - wie folgt aus:

@Value(value = "classpath:xmlToParse/companies.xml") 
private Resource companiesXml; 

die benötigten Input zu erhalten, rufen Sie einfach

companiesXml.getInputStream() 

und Sie sollten in Ordnung sein :)

Aber vergib mir, ich muss eines fragen: Warum willst du mit Hilfe von Spring einen XML-Parser implementieren? Es gibt viele eingebaute :) z. für Web-Services gibt es sehr gute Lösungen, die marshall Ihre XMLs in Java-Objekte und zurück ...

+0

Funktioniert nicht in Nicht-Feder-Klasse. –

10
ClassLoader classLoader = getClass().getClassLoader(); 
File file = new File(classLoader.getResource("fileName").getFile()); 
Verwandte Themen