C'est un rappel car il m'a fallu un certain temps pour lire les fichiers dans src / main / resources
en Java.
src/main/resources/sample1.txt
sample1
src/main/java/Foo.java
public void sample1() {
String path = "src/main/resources/sample1.txt";
try (BufferedReader br = Files.newBufferedReader(Paths.get(path))) {
System.out.println(br.readLine());
} catch (IOException e) {
e.printStackTrace();
}
}
Résultat d'exécution
sample1
src/main/resources/sample2.txt
sample2
src/main/java/Foo.java
public void sample2() {
String path = "/sample2.txt";
//Foo pour les méthodes statiques.class.Écrivez comme getResourceAsStream(Foo est le nom de la classe)
try (InputStream is = getClass().getResourceAsStream(path);
BufferedReader br = new BufferedReader(new InputStreamReader(is))) {
System.out.println(br.readLine());
} catch (IOException e) {
e.printStackTrace();
}
}
Résultat d'exécution
sample2
Dans le test, le comportement quand il y a un fichier avec le même nom dans src / test / resources
est différent entre 1 et 2.
src/test/resources/sample1.txt
test1
src/test/resources/sample2.txt
test2
src/test/java/FooTest.java
public class FooTest {
@Test
public void testInput() throws Exception {
Foo foo = new Foo();
foo.sample1(); // src/main/resources/sample1.Lire txt
foo.sample2(); // src/test/resources/sample2.Lire txt
}
}
Résultat d'exécution
sample1
test2
Dans le cas de 1, c'est naturel car le chemin est écrit directement, mais lisez sample1.txt
sous le répertoire src / main / resources
.
Dans le cas de 2, le sample2.txt
sous le répertoire src / test / resources
est lu de préférence à src / main / resources
.
S'il n'y a pas de sample2.txt
dans le répertoire src / test / resources
, le sample2.txt
sous le répertoire src / main / resources
sera lu tel quel.
Dois-je utiliser Class # getResourceAsStream
pour le moment?
Je vous serais reconnaissant si vous pouviez me faire savoir si vous avez des problèmes.
référence: Obtenir des ressources [Java] Différences dans la façon d'obtenir des fichiers sur le chemin de classe
J'ai obtenu le chemin absolu via Class # getResource
au lieu de Class # getResourceAsStream
et je l'ai passé à Paths # get
, ce qui a abouti à java.nio.file.InvalidPathException
.
String filename= "/sample2.txt";
String filepath = getClass().getResource(filename).getPath();
Path path = Paths.get(filepath); // java.nio.file.InvalidPathException
Il semble que la partie de la lettre de lecteur doit être échappée dans l'environnement Windows, et j'ai pu l'obtenir en la remplaçant comme suit.
String filename= "/sample2.txt";
String filepath = getClass().getResource(filename).getPath();
Path path = Paths.get(filepath .replaceFirst("^/(.:/)", "$1")); // OK
Référence: créer un problème de chemin de fichier Java NIO
Recommended Posts