2014-05-08 12 views
8

Ho inserito un file nel mio progetto di maven sotto src/main/resources il nome del file è semplicemente temp.txt.FileNotFoundException in src/main/resources

Quando provo ad aprire il file:

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

ottengo un errore:

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

tutti i file sotto src/main/risorse vengono inseriti nella cartella principale del classpath sotto Maven. Allora perché non è possibile trovare il file qui?

+0

Avete bisogno del '' .''? – james

+0

che non cambia nulla. Il '.' dice solo la directory corrente. Senza '.' è lo stesso del ".". – Mulgard

+0

prova a rimuoverlo ugualmente – james

risposta

13

Se si sta per impacchettare il file nel percorso classe, quindi leggerlo come tale .. dal percorso classe.

Maven Struttura

src 
    main 
     resources 
       file.txt 

Dopo si costruisce, il file viene collocato nella radice del percorso di classe. Così utilizzare

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

Il / davanti file.txt vi porterà alla radice, da qualunque pacchetto la classe è in.


UPDATE

esempio test

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

E il tuo file è in 'src/main/resources/file.txt'? –

+0

@Mulgard Vedere il mio ** UPDATE ** –

+0

Rivedere la build e verificare che il file sia stato copiato correttamente. Non c'è qualche errore di battitura? –

0

Maven inserisce i file sotto /src/main/resouces/ nel pacchetto predefinito del classpath. Da qui è possibile caricare attraverso il classloader:

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

Per ulteriori informazioni vedere Class#getResoucesAsStream.

+0

stessa eccezione. e tutti gli altri file vengono caricati allo stesso modo e funziona perfettamente. – Mulgard