[Java] Lire les fichiers dans src / main / resources

C'est un rappel car il m'a fallu un certain temps pour lire les fichiers dans src / main / resources en Java.

1. Obtenez avec le chemin absolu de la racine

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

2. Obtenu comme chemin relatif à partir du chemin de classe

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

point important

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.

Résumé

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

De côté

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


Merci d'avoir lu pour moi jusqu'à la fin. Si vous avez des questions ou des lacunes, veuillez nous contacter dans la section commentaires ou [Twitter](https://twitter.com/ka2_kamaboko).

Recommended Posts

[Java] Lire les fichiers dans src / main / resources
Lire le fichier de propriétés Java en C #
Décompressez le fichier zip en Java
Quelle est la méthode principale en Java?
Lire le fichier xlsx en Java avec Selenium
Les fichiers texte placés dans des ressources en Java ne peuvent pas être lus lorsqu'ils sont mis en jarr
Lire JSON en Java
Lire une chaîne dans un fichier PDF avec Java
Lire le fichier de propriétés Java
Lire la capture de paquets obtenue par tcpdump avec Java
[Java] Récupère le fichier dans le fichier jar quel que soit l'environnement
Lire des fichiers binaires en Java 1
Lire l'entrée standard en Java
Lire des fichiers binaires dans Java 2
[Java] [Android] Lire le fichier ini
[Java] Informations entières des caractères du fichier texte acquises par la méthode read ()
Comment lire votre propre fichier YAML (*****. Yml) en Java
Corrigez le code de caractère en Java et lisez à partir de l'URL
Accéder à l'interface réseau avec Java
Devinez le code de caractère en Java
Lisez facilement les fichiers texte en Java (Java 11 et Java 7)
Spécifiez l'emplacement Java dans eclipse.ini
Lire CSV en Java (annotation Super CSV)
Enregistrer la sortie dans un fichier en Java
Analyser l'analyse syntaxique de l'API COTOHA en Java
Inclure les ressources d'image dans le fichier jar
A propos du traitement de la copie de fichiers en Java
Appelez la super méthode en Java
Obtenez l'URL publique du fichier privé de Flickr en Java
Lire les 4 premiers octets du fichier de classe Java et générer CAFEBABE
Lire les éléments contenant des virgules dans les fichiers CSV sans fractionnement (Java)
Comment obtenir la longueur d'un fichier audio avec Java
Obtenez le résultat de POST en Java
[Java] Comment utiliser la classe File
L'histoire de l'oubli de fermer un fichier en Java et de l'échec
Essayez d'utiliser l'API Stream en Java
Appelez l'API de notification Windows en Java
J'ai essayé le nouveau yuan à Java
Mémo: [Java] Si un fichier se trouve dans le répertoire surveillé, traitez-le.
[Java] Utiliser la technologie cryptographique avec les bibliothèques standard
Organisation des notes dans la tête (Java-Arrangement)
Quelle est la meilleure lecture de fichier (Java)
Essayez d'appeler le service CORBA sur Java 11+
Lire Felica en utilisant RC-S380 (PaSoRi) en Java
Exemple de programme qui renvoie la valeur de hachage d'un fichier en Java
Comment obtenir la date avec Java
L'histoire de l'écriture de Java dans Emacs
Entrée de la console en Java (comprendre le mécanisme)
Java: placez le fichier de propriétés ResourceBundle n'importe où
Comment lire le fichier de paramètres log4j dans un projet Java assemblé dans un fichier jar Memo
Exemple pour décompresser le fichier gz en Java
[Java8] Recherchez le répertoire et récupérez le fichier
Configurez une interface graphique Java dans un thread séparé pour conserver le
Je ne me souviens pas de l'entrée / sortie du fichier texte en Java, alors je l'ai résumé.
java qui génère un fichier au format vmg au format eml
Concernant les modificateurs transitoires et la sérialisation en Java
Lire les fichiers ligne par ligne VS lire à la fois