[Java] Dateien in src / main / resources lesen

Es ist eine Erinnerung, weil ich eine Weile gebraucht habe, um die Dateien in src / main / resources in Java zu lesen.

1. Holen Sie sich mit dem absoluten Pfad von root

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();
    }
}

Ausführungsergebnis


sample1

2. Wird als relativer Pfad aus dem Klassenpfad abgerufen

src/main/resources/sample2.txt


sample2

src/main/java/Foo.java


public void sample2() {
    String path = "/sample2.txt";
    //Foo für statische Methoden.class.Schreiben Sie wie getResourceAsStream(Foo ist der Klassenname)
    try (InputStream is = getClass().getResourceAsStream(path);
        BufferedReader br = new BufferedReader(new InputStreamReader(is))) {

        System.out.println(br.readLine());

    } catch (IOException e) {
        e.printStackTrace();
    }
}

Ausführungsergebnis


sample2

wichtiger Punkt

In 1 und 2 ist das Verhalten beim Testen unterschiedlich, wenn eine Datei mit demselben Namen in "src / test / resources" vorhanden ist.

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.Lesen Sie txt
    foo.sample2();  // src/test/resources/sample2.Lesen Sie txt
  }
}

Ausführungsergebnis


sample1
test2

Im Fall von 1 ist dies natürlich, da der Pfad direkt geschrieben wird, aber "sample1.txt" im Verzeichnis "src / main / resources" gelesen wird. Im Fall von 2 wird "sample2.txt" im Verzeichnis "src / test / resources" vor "src / main / resources" gelesen.

Wenn sich im Verzeichnis "src / test / resources" kein "sample2.txt" befindet, wird das "sample2.txt" im Verzeichnis "src / main / resources" unverändert gelesen.

Zusammenfassung

Sollte ich vorerst "Class # getResourceAsStream" verwenden? Ich würde mich freuen, wenn Sie mich wissen lassen könnten, wenn Sie irgendwelche Probleme haben.

Referenz: Ressourcen abrufen [Java] Unterschiede beim Abrufen von Dateien im Klassenpfad

Beiseite

Ich habe den absoluten Pfad über "Class # getResource" anstelle von "Class # getResourceAsStream" erhalten und ihn an "Paths # get" übergeben, was zu "java.nio.file.InvalidPathException" führte.

String filename= "/sample2.txt";
String filepath = getClass().getResource(filename).getPath();
Path path = Paths.get(filepath); // java.nio.file.InvalidPathException

Es scheint, dass der Laufwerksbuchstaben in der Windows-Umgebung maskiert werden muss, und ich konnte ihn erhalten, indem ich ihn wie folgt ersetzte.

String filename= "/sample2.txt";
String filepath = getClass().getResource(filename).getPath();
Path path = Paths.get(filepath .replaceFirst("^/(.:/)", "$1")); // OK

Referenz: Problem mit dem Java NIO-Dateipfad erstellen


Danke, dass Sie bis zum Ende für mich gelesen haben. Wenn Sie Fragen oder Mängel haben, kontaktieren Sie uns bitte im Kommentarbereich oder unter [Twitter](https://twitter.com/ka2_kamaboko).

Recommended Posts

[Java] Dateien in src / main / resources lesen
Lesen Sie die Java-Eigenschaftendatei in C #
Entpacken Sie die Zip-Datei in Java
Was ist die Hauptmethode in Java?
Lesen Sie die xlsx-Datei in Java mit Selenium
Textdateien, die in Ressourcen in Java abgelegt sind, können nicht gelesen werden, wenn sie beschädigt sind
Lesen Sie JSON in Java
Lesen Sie eine Zeichenfolge in einer PDF-Datei mit Java
Java-Eigenschaftendatei lesen
Lesen Sie die Paketerfassung, die von tcpdump mit Java erhalten wurde
[Java] Holen Sie sich die Datei unabhängig von der Umgebung in das JAR
Lesen Sie Binärdateien in Java 1
Lesen Sie die Standardeingabe in Java
Lesen Sie Binärdateien in Java 2
[Java] [Android] INI-Datei lesen
[Java] Ganzzahlige Informationen von Zeichen in der Textdatei, die mit der Methode read () erfasst wurden
So lesen Sie Ihre eigene YAML-Datei (*****. Yml) in Java
Korrigieren Sie den Zeichencode in Java und lesen Sie von der URL
Greifen Sie mit Java auf die Netzwerkschnittstelle zu
Errate den Zeichencode in Java
Einfaches Lesen von Textdateien in Java (Java 11 & Java 7)
Geben Sie den Java-Speicherort in eclipse.ini an
Lesen Sie CSV in Java (Super CSV Annotation)
Protokollausgabe in Datei in Java
Analysieren der COTOHA-API-Syntaxanalyse in Java
Fügen Sie Bildressourcen in die JAR-Datei ein
Informationen zur Dateikopierverarbeitung in Java
Rufen Sie die Super-Methode in Java auf
Rufen Sie die öffentliche URL der privaten Datei von Flickr in Java ab
Lesen Sie die ersten 4 Bytes der Java-Klassendatei und geben Sie CAFEBABE aus
Lesen Sie Elemente mit Kommas in CSV-Dateien ohne Aufteilung (Java).
So ermitteln Sie die Länge einer Audiodatei mit Java
Holen Sie sich das Ergebnis von POST in Java
[Java] Verwendung der File-Klasse
Die Geschichte, zu vergessen, eine Datei in Java zu schließen und zu scheitern
Versuchen Sie es mit der Stream-API in Java
Rufen Sie die Windows-Benachrichtigungs-API in Java auf
Ich habe das neue Yuan-Problem in Java ausprobiert
Anmerkung: [Java] Wenn sich eine Datei im überwachten Verzeichnis befindet, verarbeiten Sie sie.
[Java] Verwenden Sie kryptografische Technologie mit Standardbibliotheken
Notizen im Kopf organisieren (Java-Arrangement)
Was ist das beste Lesen von Dateien (Java)
Versuchen Sie, den CORBA-Dienst unter Java 11+ aufzurufen
Lesen Sie Felica mit RC-S380 (PaSoRi) in Java
Beispielprogramm, das den Hashwert einer Datei in Java zurückgibt
So erhalten Sie das Datum mit Java
Die Geschichte des Schreibens von Java in Emacs
Konsoleneingabe in Java (Verständnis des Mechanismus)
Java: Platzieren Sie die ResourceBundle-Eigenschaftendatei an einer beliebigen Stelle
Lesen der log4j-Einstellungsdatei in einem Java-Projekt, das in der JAR-Datei Memo zusammengestellt ist
Beispiel zum Entpacken einer gz-Datei in Java
[Java8] Durchsuchen Sie das Verzeichnis und holen Sie sich die Datei
Richten Sie eine Java-GUI in einem separaten Thread ein, um die Haupt-GUI beizubehalten
Ich kann mich nicht an die Eingabe / Ausgabe von Textdateien in Java erinnern, also habe ich sie zusammengefasst.
Java, das eine Datei im Vmg-Format im EML-Format ausgibt
In Bezug auf transiente Modifikatoren und Serialisierung in Java
Dateien zeilenweise lesen VS sofort lesen