web-dev-qa-db-fra.com

FileNotFoundException dans src/main/resources

j'ai placé un fichier dans mon projet maven sous src/main/resources le nom du fichier est simplement temp.txt.

Quand j'essaye d'ouvrir le fichier:

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

Je reçois une erreur:

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

tous les fichiers sous src/main/resources sont placés dans le dossier racine de le classpath sous maven . Alors pourquoi le programme ne trouve-t-il pas le fichier ici?

16
Mulgard

Si vous souhaitez conditionner le fichier dans le chemin de classe, lisez-le en tant que tel .. à partir du chemin de classe.

Structure Maven

src
   main
       resources
               file.txt

Une fois construit, le fichier est placé à la racine du chemin de classe. Donc utiliser

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

Le / devant le file.txt vous mènera à la racine, quel que soit le paquet dans lequel se trouve la classe.


METTRE À JOUR

Exemple de 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

19
Paul Samsotha

il suffit de donner ceci comme chemin:

BufferedReader br = new BufferedReader(new FileReader(new 
File("src/main/resources/temp.txt")));
3
Akshay Indalkar

Avait ce problème lors de la mise en place des tests d'intégration dans Jenkins. 
Le problème était dû au fait que le travail se trouvait dans un dossier avec des espaces dans le nom. Donc, au lieu d'avoir un dossier d'espace de travail nommé foo bar, Jenkins a créé foo%20bar et tous les tests ont échoué avec FileNotFoundException

La solution consiste simplement à renommer votre dossier afin qu’il n’y ait plus d’espace.

1
Adrian Chu

Maven place les fichiers sous /src/main/resouces/ dans le package par défaut de votre chemin de classe. Par conséquent, vous pouvez charger via le chargeur de classes:

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

Pour plus d'informations, voir Classe # getResoucesAsStream .

0
gregor