2016-11-13 3 views
4

Mit Java 8.Wie lese ich eine zur Laufzeit erstellte Datei?

Grundsätzlich in einem Unit-Test (JUnit) Ich habe diesen Code:

callSomeCode(); 
assertTrue(new File(this.getClass().getResource("/img/dest/someImage.gif").getFile()).exists()); 

In callSomeCode(), ich habe dies:

InputStream is = bodyPart.getInputStream(); 
File f = new File("src/test/resources/img/dest/" + bodyPart.getFileName()); //filename being someImage.gif 
FileOutputStream fos = new FileOutputStream(f); 
byte[] buf = new byte[40096]; 
int bytesRead; 
while ((bytesRead = is.read(buf)) != -1) 
    fos.write(buf, 0, bytesRead); 
fos.close(); 

Das erste Mal, wenn der Test Läuft, this.getClass().getResource("/img/dest/someImage.gif") gibt null zurück, obwohl die Datei gut erstellt ist.

Das zweite Mal (wenn die Datei bereits während des ersten Testlaufs erstellt und dann einfach überschrieben wurde), ist sie nicht null und der Test wird bestanden.

Wie man es das erste Mal arbeiten lässt?
Sollte ich eine spezielle Konfiguration in IntelliJ konfigurieren, um automatisch den Ordner zu aktualisieren, in dem die Datei erstellt wird?

Bitte beachte, dass ich diese grundlegende Maven Struktur haben:

--src 
----test 
------resources 
+1

http://stackoverflow.com/a/1011126/1587791 – nakano531

Antwort

2

Als Kommentar von nakano531 weist darauf hin - Ihr Problem ist nicht mit dem Dateisystem, aber mit dem Classpath. Sie versuchen, Ihre Datei mit einem Klassenlader zu lesen, indem Sie die Methoden getClass().getResource(...) aufrufen, anstatt die Datei mit Klassen zu lesen, die direkt auf das Dateisystem zugreifen.

Zum Beispiel, wenn Sie Ihren Test wie folgt geschrieben:

callSomeCode(); 
File file = new File("src/test/resources/img/dest/someImage.gif"); 
assertTrue(file.exists()); 

Sie würden nicht das Problem gehabt haben, jetzt Sie haben.

Die andere Option ist die Lösung aus der Verbindung zu implementieren, die zur Verfügung gestellt nakano531: https://stackoverflow.com/a/1011126/1587791

+0

Tatsächlich würde ich sogar sagen, offensichtlich. Vielen Dank ;) – Mik378

Verwandte Themen