[JAVA] Ich blieb in File stecken

Ich blieb in der File-Klasse stecken

Es war ein Vorfall, als ich ein Programm erstellte, das die File-Klasse in Java verwendet. ..

Ich habe so ein Programm gemacht

Es war ein Programm, das den Ordnerbaum eines angegebenen Ordners patrouillierte, den Text danach las und an CSV ausgab.

Ordnerstruktur

targetFolder ├folder1 │ ├folder1_folder1 │ │ ├text1.txt │ │ ├text2.txt │ │ └text3.txt │ └folder1_folder2 │ ├text.txt │ ├text2.txt │ └text3.txt ├folder2 │ ├folder2_folder1 │ │ ├text1.txt │ │ ├text2.txt │ │ └text3.txt
Folgendes wird weggelassen

Die Methode, um herumzugehen, ist wie folgt

private static List<File> getFileInstanceList(String filePathStr) throws IOException {
    try (Stream<Path> path = Files.list(Paths.get(filePathStr))) {
        return path.map(f -> f.getFileName().toFile()).collect(Collectors.toList());
    }
}

Wenn Sie den Pfad des Ordners als Argument übergeben, wird die Dateiinstanz des Ordners in diesem Ordner in einer Liste zurückgegeben.

List<File> list = getFileInstanceList("C:\Users\hoge\Desktop\targetFile\");

An der Lesequelle wurde die zurückgegebene Liste mit For-each wiederholt, und der Dateipfad des untergeordneten Ordners wurde erneut an die obige Methode übergeben, aber ...

Ein Fehler ist aufgetreten

Es gab ein Problem mit der von dieser Methode zurückgegebenen Dateiinstanz Als ich den Pfad des untergeordneten Ordners erhielt, konnte ich nur den Dateinamen erhalten

Als ich JavaDoc der File-Klasse überprüft habe, habe ich die folgende Beschreibung gefunden

Gibt ein Dateiobjekt zurück, das diesen Pfad darstellt. Wenn dieser Pfad dem Standardanbieter zugeordnet ist, entspricht diese Methode der Rückgabe eines Dateiobjekts, das mit einer Zeichenfolgendarstellung dieses Pfads erstellt wurde. Wenn dieser Pfad durch Aufrufen der File-to-Path-Methode erstellt wird, kann nicht garantiert werden, dass das von dieser Methode zurückgegebene File-Objekt der ursprünglichen Datei entspricht.

Entspricht der Rückgabe eines Dateiobjekts, das mit einer Zeichenfolgendarstellung erstellt wurde? ??

Ich weiß nicht, was es ist, aber ich denke, es ist so, wenn es leicht zu verstehen ist. Die Dateiklasse verfügt über einen Konstruktor, der String als Argument verwendet Wenn die zu diesem Zeitpunkt generierte Instanz den vollständigen Pfad der Datei angibt Manchmal wird nur der Dateiname angegeben, letzterer kann jedoch den tatsächlichen Status der Datei nicht korrekt beibehalten.

Nun, "C: \ Benutzer \ hoge \ Desktop \ Zieldatei \ Ordner1" Wenn eine von "Ordner1" erstellte Dateiinstanz vorhanden ist, ist die erstere realistischer.

Verbesserte Methode

private static List<File> getFileInstanceList(String filePathStr) throws IOException {
   try (Stream<Path> path = Files.list(Paths.get(filePathStr))) {
        return path.map(f -> new File(f.toUri())).collect(Collectors.toList());
   }
}

Da es ausreicht, den vollständigen Pfad zum Generieren einer Datei zu übergeben, habe ich ihn geändert, um eine Datei mit Uri of Path als Argument zu instanziieren.

Ich bin mir nur nicht sicher, ob ich JavaDoc lese. Ist Api daran gewöhnt?

Recommended Posts

Ich blieb in File stecken
Wo ich im heutigen "Rails Tutorial" (2020/10/05) stecken geblieben bin
Wo ich im heutigen "Rails Tutorial" (2020/10/06) stecken geblieben bin
Wo ich im heutigen "Rails Tutorial" (2020/10/04) stecken geblieben bin
Wo ich im heutigen "Rails Tutorial" (2020/10/07) stecken geblieben bin
Ich steckte in einem Klon eines zweidimensionalen Arrays fest
Ich war süchtig nach Spring's @Transactional
[JAVA] Projekt Euler, ich steckte im achten Quartal fest
Ich blieb beim Studium von Java SE 7/8 Bronze stecken
Ich habe ein Symbol, das in Android Studio nicht aufgelöst werden kann
Ich habe in RSpec den Fehler "undefined method` create '" erhalten
Als ich zu IntelliJ wechselte, gab es einen großen Unterschied in der Codierung der Eigenschaftendatei.
Ich habe ein Roulette in Java gemacht.
Ich habe module-info.java in java.base gelesen
Ich möchte eine Parkettdatei auch in Ruby erstellen
Ich habe ein ActionController :: MissingExactTemplate, obwohl ich eine Datei habe
Ich habe versucht, Metaprogrammierung mit Java
Ich habe an Kubernetes Internal # 2 teilgenommen
Über das, was ich beim Erstellen einer CLJ-Datei mit Clojure getan habe
Ich habe eine E-Mail in Java gesendet
Lesen Sie die Java-Eigenschaftendatei in C #
Ich habe ein PDF mit Java erstellt.
Ich habe am JJUG CCC 2019 Spring teilgenommen
Entpacken Sie die Zip-Datei in Java
Protokollausgabe in Datei in Java
Ich habe Gordobachs Theorem in Java geschrieben
Ich habe versucht, Domino11 in CentOS7 zu integrieren
[Java] Was in der Kapselung stecken geblieben ist
Ich habe am JJUG CCC 2019 Herbst teilgenommen
Ich habe eine Anmerkung in Java gemacht.
Ich habe versucht, JWT in Java zu verwenden
Fügen Sie Bildressourcen in die JAR-Datei ein
Informationen zur Dateikopierverarbeitung in Java
Bleiben Sie in einem Java Primer stecken
Ich habe am JJUG CCC 2019 Herbst teilgenommen.
Ich habe eine Rails-Umgebung mit Docker und MySQL erstellt, aber ich war krank
Ich habe die Datei untersucht, die bei der Auswahl von Leere Aktivität in Android Studio erstellt wurde
Ich erhalte folgende Fehler: Der Benutzer muss im Unit-Model-Test vorhanden sein
Ich habe den Paketnamen überprüft, auf den die in der JAR-Datei enthaltene Klasse verweist
In WSL2, als ich "Docker-Compose Up" machte, bekam ich eine Fehlermeldung, dass die sh-Datei nicht gefunden wurde.