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?
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);
}
}
}
il suffit de donner ceci comme chemin:
BufferedReader br = new BufferedReader(new FileReader(new
File("src/main/resources/temp.txt")));
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.
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 .