Speichern von Dateien mit der angegebenen Erweiterung unter dem in Java angegebenen Verzeichnis in der Liste

Hintergrund

Wenn eine große Anzahl von Dateien in Java ausgeführt werden muss, ist es durchweg einfacher, den Auflistungsteil in Java zu implementieren, als ihn mit dem Befehl find des Terminals aufzulisten und dann an Java zu übergeben. Also habe ich diesen Code geschrieben.

Codeübersicht

Dieses Programm verwendet den Verzeichnisnamen und die Erweiterung als Argumente, durchsucht das angegebene Verzeichnis und die darunter liegenden Verzeichnisse und speichert die Datei mit der angegebenen Erweiterung in "ArrayList". Hier finden Sie die m4a-Datei im iTunes-Ordner und speichern sie in der Liste.

Der obige Code verwendet die neuen Java 8-Lambda-Ausdrücke (Lambda-Ausdrücke) und Streams ( Stream). Im Folgenden finden Sie Code, der keine Lambda-Ausdrücke und Streams verwendet. (Möglicherweise funktioniert es mit Java, das älter als Java 8 ist.)

Java 8 oder höher

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.regex.Pattern;
import java.util.ArrayList;
import java.util.stream.Stream;

public class Utils {
    public static void main(String[] args) throws IOException {
        // To list up m4a files in iTunes directory
        Path rootDir = Paths.get(System.getProperty("user.home"), "Music", "iTunes");
        String extension  = "m4a";

        // for standard inputs
        if (args.length == 2) {
            rootDir = Paths.get(args[0]);
            extension   = args[1];
        } else if (args.length != 0){
            System.err.println("Error: set correct args.");
        }

        if (!Pattern.matches("^[0-9a-zA-Z]+$", extension)) {
            System.err.println("Error: set correct extension. (only alphabet and numeric)");
        } else {
            ArrayList<File> fileList = listUpFiles(rootDir, extension);
            for (File file : fileList) {
                System.out.println(file.getAbsolutePath());
            }
            System.out.println(fileList.size());    
        }
    }

    /**
     * list up files with specified file extension (extension)
     * under the specified directory (rootDir) recursively.
     * @param rootDir   : root directory
     * @param extension : string needs to be contained as file extension
     * @return          : list of files
     */
     public static ArrayList<File> listUpFiles(Path rootDir, String extension){
        String extensionPattern = "." + extension.toLowerCase();
        final ArrayList<File> fileList = new ArrayList();

        try (final Stream<Path> pathStream = Files.walk(rootDir)) {
            pathStream
                    .map(path -> Path::toFile)
                    .filter(file -> !file.isDirectory())
                    .filter(file -> file.getName().toLowerCase().endsWith(extensionPattern))
                    .forEach(fileList::add);
        } catch (final IOException e) {
            e.printStackTrace();
        }
        return (fileList);
    }
}

Code, der keine Lambda-Ausdrücke und Streams verwendet

import java.io.File;
import java.util.regex.Pattern;
import java.util.ArrayList;

public class UtilsOld {

    public static void main(String[] args) {
        // To list up m4a files in iTunes directory
        String rootDirName = System.getProperty("user.home") + java.io.File.separator +
                             "Music" + java.io.File.separator + "iTunes";
        String extension  = "m4a";

        // for standard input
        if (args.length == 2) {
            rootDirName = args[0];
            extension   = args[1];
        } else if (args.length != 0){
            System.err.println("Error: set correct args.");
        }

        if (!Pattern.matches("^[0-9a-zA-Z]+$", extension)) {
            System.err.println("Error: set correct extension. (only alphabet and numeric)");
        } else {
            String extensionPattern = "." + extension.toLowerCase();

            ArrayList<File> fileList = new ArrayList();
            fileList = listUpFiles(rootDirName, extensionPattern, fileList);

            for (File file : fileList) {
                System.out.println(file.getAbsolutePath());
            }
            System.out.println(fileList.size());
        }
    }

    /**
     * list up files with specified file extension (ext)
     * under the specified directory (rootDirName) recursively.
     *
     * @param rootDirName      : root directory name
     * @param extensionPattern : regular expression pattern of file extension
     * @param fileArrayList    : ArrayList to store files
     * @return : return fileArrayList
     */
    public static ArrayList listUpFiles(String rootDirName, String extensionPattern, ArrayList<File> fileArrayList){
        File rootDir = new File(rootDirName);
        File[] listOfFiles = rootDir.listFiles();
        assert listOfFiles != null;

        for (File item : listOfFiles) {
            if (item.isDirectory()) {
                fileArrayList = listUpFiles(item.getAbsolutePath(), extensionPattern, fileArrayList);
            } else if (item.isFile()) {
                String fileName = item.getName().toLowerCase();
                if (fileName.endsWith(extensionPattern)) {
                    fileArrayList.add(item);
                }
            }
        }
        return(fileArrayList);
    }
}

Referenz

Kommentar von saka1029 https://www.javacodegeeks.com/2014/05/playing-with-java-8-lambdas-paths-and-files.html

Recommended Posts

Speichern von Dateien mit der angegebenen Erweiterung unter dem in Java angegebenen Verzeichnis in der Liste
So ermitteln Sie den absoluten Pfad eines in Java ausgeführten Verzeichnisses
[Java] So suchen Sie mit der Methode includes nach Werten in einem Array (oder einer Liste)
So konvertieren Sie eine Datei in ein Byte-Array in Java
So erstellen Sie eine JAR-Datei ohne Abhängigkeiten in Maven
[chown] So ändern Sie den Eigentümer einer Datei oder eines Verzeichnisses
So ermitteln Sie die Länge einer Audiodatei mit Java
[Java] Verwendung der File-Klasse
[Java] So erhalten Sie das aktuelle Verzeichnis
So erhalten Sie das Datum mit Java
[Java-Tool] Ein Tool, das Dateien unter dem angegebenen Pfad nach Erweiterung löscht
[Persönliches Memo] Interaktion mit dem Zufallszahlengenerator in Java
Die Geschichte, zu vergessen, eine Datei in Java zu schließen und zu scheitern
So finden Sie heraus, welche Java-Version der Klassendatei kompiliert wurde
So starten Sie einen Docker-Container mit einem in einer Batchdatei bereitgestellten Volume
Lesen Sie eine Zeichenfolge in einer PDF-Datei mit Java
So erhalten Sie die ID eines Benutzers, der sich in Swift bei Firebase authentifiziert hat
So komprimieren Sie eine JAVA-CSV-Datei und verwalten sie in einem Byte-Array
So erstellen Sie eine Java-Umgebung in nur 3 Sekunden
[Java] So lassen Sie den privaten Konstruktor in Lombok weg
So springen Sie von Eclipse Java zu einer SQL-Datei
java: Wie schreibe ich eine generische Typliste? [Hinweis]
[Java] So extrahieren Sie den Dateinamen aus dem Pfad
So erstellen Sie einen Daten-URI (base64) in Java
Organisierte schrittweise Interaktion mit dem JDK
[So fügen Sie ein Video mit Rails in haml ein]
So konvertieren Sie A in a und a in A mit logischem Produkt und Summe in Java
So debuggen Sie die generierte JAR-Datei mit Eclipse
Verwenden Sie java1.7 (zulu7) in einem bestimmten Verzeichnis mit jenv
[Java] So unterbrechen Sie eine Zeile mit StringBuilder
Wenn Sie SQLite mit VSCode verwenden, verwenden Sie die Erweiterung (wie die Binärdatei von sqlite3 angezeigt wird)
Zusammenfassung der Verwendung des im IE festgelegten Proxy-Sets bei der Verbindung mit Java
So machen Sie einen Screenshot mit dem Android Studio-Emulator
So fordern Sie mit jMeter eine CSV-Datei als JSON an
So lesen Sie Ihre eigene YAML-Datei (*****. Yml) in Java
So verbinden Sie die Zeichenfolgen in der Liste durch Kommas getrennt
So erstellen Sie ein Platzhalterteil zur Verwendung in der IN-Klausel
Ich möchte eine Liste mit Kotlin und Java erstellen!
Speichern von Zeichenfolgen von ArrayList zu Zeichenfolge in Java (Personal)
Großschreibung nur des angegebenen Bereichs mit Teilzeichenfolge. (Verwendung von Teilzeichenfolgen)
Erstellen Sie eine Methode, um den Steuersatz in Java zurückzugeben
So wählen Sie ein bestimmtes Datum anhand des Codes im FS-Kalender aus
So fügen Sie dieselben Indizes in ein verschachteltes Array ein
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben
Zuordnung zu einer Klasse mit einem Wertobjekt in How to My Batis
So entwickeln und registrieren Sie eine Sota-App in Java
So simulieren Sie das Hochladen von Post-Object-Formularen in OSS in Java
So leiten Sie den letzten Tag des Monats in Java ab
Informationen zum Verhalten beim Erstellen einer Dateizuordnung mit Java
So wechseln Sie Java in der OpenJDK-Ära auf dem Mac
So richten Sie einen Proxy mit Authentifizierung in Feign ein
In Anbetracht der Einführung der Java-Sprache in der Reiwa-Ära ~ Auswahl eines sicheren SDK
So schreiben Sie Kommentare in die Schemadefinitionsdatei in GraphQL Java und spiegeln sie in GraphiQL und GraphQL Playground wider
So reduzieren Sie die Programmlast ein wenig, wenn Sie Zeichen mit JAVA kombinieren
So erstellen Sie eine JAR-Datei und eine War-Datei mit dem Befehl jar
[Rails / Routing] So verweisen Sie auf den Controller in Ihrem eigenen Verzeichnis
So brechen Sie das Zusammenführen von Zellen innerhalb eines bestimmten Bereichs mit dem POI ab
So erstellen Sie einen Java-Container