2014-05-08 8 views
8

Ich habe eine Datei in meinem Maven-Projekt unter src/main/resources der Dateiname ist einfach temp.txt.FileNotFoundException in src/main/resources

Wenn ich versuche, die Datei zu öffnen:

BufferedReader br = new BufferedReader(new FileReader(new File("./temp.txt"))); 

Ich erhalte eine Fehlermeldung:

Exception in thread "main" java.io.FileNotFoundException: \temp.txt 

alle Dateien unter src/main/resources im Stammordner von platziert sind die Classpath unter Maven. Warum kann das Programm die Datei nicht finden?

+0

benötigen Sie das '‘ .''? – james

+0

das ändert nichts. Das '.' sagt nur das aktuelle Verzeichnis. Ohne '.' ist das gleiche wie mit dem ".". – Mulgard

+0

versuchen, es trotzdem zu entfernen – james

Antwort

13

Wenn Sie die Datei in den Klassenpfad packen möchten, lesen Sie sie als solche aus dem Klassenpfad.

Maven Struktur

src 
    main 
     resources 
       file.txt 

Nachdem es baut, wird die Datei in der Wurzel der Klassenpfad platziert. So verwenden

InputStream is = getClass().getResourceAsStream("/file.txt"); 
BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 

Die / vor file.txt werden Sie an die Wurzel bringen, egal aus welchem ​​Paket der Klasse ist in.


UPDATE

Testbeispiel

package com.underdogdevs.stackoverflow; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 

public class TestResourceFile { 

    public static void main(String[] args) throws IOException { 
     InputStream is = TestResourceFile.class.getResourceAsStream("/test.txt"); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 
     String line; 
     while ((line = reader.readLine()) != null) { 
      System.out.println(line); 
     } 
    } 
} 

enter image description here

enter image description here

+0

Und Ihre Datei befindet sich in 'src/main/resources/file.txt'? –

+0

@Mulgard Siehe mein ** UPDATE ** –

+0

Überprüfen Sie Ihren Build und überprüfen Sie, ob die Datei korrekt kopiert wurde. Gibt es nicht einen Tippfehler? –

0

Maven legt die Dateien unter /src/main/resouces/ in das Standardpaket Ihrer Classpath. Daher können Sie durch den Klassenlader laden:

InputStream in = getClass().getResourcesAsStream("temp.txt") 

Weitere Informationen Class#getResoucesAsStream sehen.

+0

gleiche Ausnahme. und alle anderen Dateien lade ich auf die gleiche Weise und es funktioniert perfekt. – Mulgard

Verwandte Themen