2017-01-20 2 views
6

Ich versuche, eine Textdatei mit Spring Ressourcenlade wie folgt zu lesen:Frühling Boot - Lesetextdatei mit Resource

Resource resource = resourceLoader.getResource("classpath:\\static\\Sample.txt"); 

Die Datei hier in Projekt meines Frühlings Boot lokalisiert: enter image description here

es funktioniert gut, wenn die Anwendung in eclipse ausgeführt wird, aber wenn ich die Anwendung verpacken dann führen sie es java -jar verwenden, bekomme ich Dateiausnahme nicht gefunden:

java.io.FileNotFoundException: class path resource [static/Sample.txt] cannot be resolved to absolute file path because it does not reside in the 
file system: jar:file:/C:/workspace-test/XXX/target/XXX-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/static/Sample.txt 

Ich habe die Jar-Datei entpackt, in der sich das Sample befindet: XXX-0.0.1-SNAPSHOT \ BOOT-INF \ Klassen \ statisch \ Sample.txt

Kann mir bitte jemand helfen?

Vielen Dank im Voraus!

+0

Sie Ihre JAR-Datei entpacken müssen lesen wollen, um zu sehen, wo Ihre Probe ist .txt.Maybe wurde beim Packen verschoben. –

+0

Ich habe es hier ist: XXX-0.0.1-SNAPSHOT \ BOOT-INF \ Klassen \ statische \ Sample.txt – Greg

+0

Bitte drucken Sie die Variable CLASSPATH auf der Shell und zeigen Sie den Wert. 'echo% classpath%'. – VHS

Antwort

11

Ich habe Ihre code.If überprüft Sie möchten, dass eine Datei von Classpath in einem Frühlings-Boot-JAR laden , dann müssen Sie die resource.getInputStream() anstatt resource.getFile() verwenden. Wenn Sie versuchen, resource.getFile() zu verwenden, erhalten Sie einen Fehler, da Spring versucht, auf einen Dateisystempfad zuzugreifen, aber es kann nicht auf einen Pfad in Ihrer JAR zugreifen.

Detail wie folgt:

https://smarterco.de/java-load-file-classpath-spring-boot/

+0

Danke, ich habe seit Jahren nach dieser Antwort gesucht !!! – Custard

0

Bitte versuchen Sie es resourceLoader.getResource("classpath:static/Sample.txt");

mit diesem Code arbeiten, wenn sie mit java -jar XXXX.jar

enter image description here

------ ------ Update laufen

Nachdem durch die Codes gehen Das eigentliche Problem ist, dass Sie versuchen, die Datei von der FileInputStream zu lesen, aber eigentlich ist es in der JAR-Datei.

Aber Sie bekommen tatsächlich die org.springframework.core.io.Resource so bedeutet, dass Sie wirklich die die Input, so dass Sie es wie tun kann new BufferedReader(new InputStreamReader(resource.getInputStream())).readLine();

+0

Leider fast der gleiche Fehler – Greg

+0

nicht Arbeit für mich, vielleicht bcs Ich benutze Spring Boot? – Greg

+0

@Greg Ja, ich benutze Spring Boot 1.4.3, was ist die genaue Version für Sie? –

0

hatte ich das gleiche Problem und wie @Gipple See erklärt, mit Frühlings-Boot müssen Sie Datei als input laden. So unten Ich werde meinen Code als Beispiel hinzufügen, wo ich import.xml Datei

public void init() { 
    Resource resource = new ClassPathResource("imports/imports.xml"); 
    try { 
     InputStream dbAsStream = resource.getInputStream(); 
     try { 
      document = readXml(dbAsStream); 
      } catch (SAXException e) { 
       trace.error(e.getMessage(), e); 
       e.printStackTrace(); 
      } catch (ParserConfigurationException e) { 
       trace.error(e.getMessage(), e); 
       e.printStackTrace(); 
      } 
    } catch (IOException e) { 
     trace.error(e.getMessage(), e); 
     e.printStackTrace(); 
    } 
    initListeImports(); 
    initNewImports(); 
} 

public static Document readXml(InputStream is) throws SAXException, IOException, 
     ParserConfigurationException { 
     DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 

     dbf.setValidating(false); 
     dbf.setIgnoringComments(false); 
     dbf.setIgnoringElementContentWhitespace(true); 
     dbf.setNamespaceAware(true); 
     DocumentBuilder db = null; 
     db = dbf.newDocumentBuilder(); 

     return db.parse(is); 
    } 

I added „imports.xml“ unten src/main/ressources/imports

Verwandte Themen