Comment enregistrer des fichiers avec l'extension spécifiée sous le répertoire spécifié en Java dans la liste

Contexte

Lorsqu'il est nécessaire d'exploiter un grand nombre de fichiers en Java, il est systématiquement plus facile d'implémenter la partie listage en Java que de la lister avec la commande find du terminal puis de la passer à Java. J'ai donc écrit ce code.

Aperçu du code

Ce programme prend le nom et l'extension du répertoire comme arguments, recherche le répertoire spécifié et les répertoires en dessous, et enregistre le fichier avec l'extension spécifiée dans ʻArrayList`. Ici, trouvez le fichier m4a dans le dossier iTunes et enregistrez-le dans la liste.

Le code ci-dessus utilise les nouvelles expressions lambda Java 8 (Lambda Expressions) et les flux ( Stream). Voir ci-dessous pour le code qui n'utilise pas d'expressions lambda et de flux. (Cela peut fonctionner avec Java plus ancien que Java 8.)

Java 8 ou version ultérieure

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 qui n'utilise pas d'expressions lambda et de flux

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

référence

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

Recommended Posts

Comment enregistrer des fichiers avec l'extension spécifiée sous le répertoire spécifié en Java dans la liste
Comment obtenir le chemin absolu d'un répertoire s'exécutant en Java
[Java] Comment rechercher des valeurs dans un tableau (ou une liste) avec la méthode contains
Comment convertir un fichier en tableau d'octets en Java
Comment créer un fichier jar sans dépendances dans Maven
[chown] Comment changer le propriétaire d'un fichier ou d'un répertoire
Comment obtenir la longueur d'un fichier audio avec Java
[Java] Comment utiliser la classe File
[Java] Comment obtenir le répertoire actuel
Comment obtenir la date avec Java
[outil java] Un outil qui supprime les fichiers sous le chemin spécifié par extension
[Mémo personnel] Comment interagir avec le générateur de nombres aléatoires en Java
L'histoire de l'oubli de fermer un fichier en Java et de l'échec
Comment savoir quelle version Java d'un fichier de classe a été compilée
Comment démarrer un conteneur Docker avec un volume monté dans un fichier de commandes
Lire une chaîne dans un fichier PDF avec Java
Comment obtenir l'ID d'un utilisateur qui s'est authentifié avec Firebase dans Swift
Comment compresser un fichier JAVA CSV et le gérer dans un tableau d'octets
Comment créer un environnement Java en seulement 3 secondes
[Java] Comment omettre le constructeur privé dans Lombok
Comment passer d'Eclipse Java à un fichier SQL
java: Comment écrire une liste de types génériques [Note]
[Java] Comment extraire le nom du fichier du chemin
Comment créer un URI de données (base64) en Java
Organisé comment interagir avec le JDK par étapes
[Comment insérer une vidéo dans un hameau avec Rails]
Comment convertir A en A et A en A en utilisant le produit logique et la somme en Java
Comment déboguer le fichier jar généré avec Eclipse
Utilisez java1.7 (zulu7) dans un répertoire spécifique avec jenv
[Java] Comment rompre une ligne avec StringBuilder
Si vous utilisez SQLite avec VSCode, utilisez l'extension (comment voir le fichier binaire de sqlite3)
Résumé de l'utilisation du jeu de proxy dans IE lors de la connexion avec Java
Comment faire une capture d'écran avec l'émulateur Android Studio
Comment demander un fichier CSV au format JSON avec jMeter
Comment lire votre propre fichier YAML (*****. Yml) en Java
Comment connecter les chaînes de la liste séparées par des virgules
Comment créer une partie d'espace réservé à utiliser dans la clause IN
Je veux faire une liste avec kotlin et java!
Comment stocker des chaînes de ArrayList à String en Java (personnel)
Mettez en majuscule uniquement la plage spécifiée avec la sous-chaîne. (Comment utiliser la sous-chaîne)
Créer une méthode pour renvoyer le taux de taxe en Java
Comment sélectionner une date spécifiée par code dans le calendrier FS
Comment ajouter les mêmes index dans un tableau imbriqué
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3
Mappage à une classe avec un objet de valeur dans How to My Batis
Comment développer et enregistrer une application Sota en Java
Comment simuler le téléchargement de formulaires post-objet vers OSS en Java
Comment dériver le dernier jour du mois en Java
À propos du comportement lors de la création d'un mappage de fichiers avec Java
Comment changer Java à l'ère d'OpenJDK sur Mac
Comment configurer un proxy avec authentification dans Feign
Considérer l'adoption du langage Java à l'ère Reiwa ~ Comment choisir un SDK sûr
Comment écrire des commentaires dans le fichier de définition de schéma dans GraphQL Java et les refléter dans GraphiQL et GraphQL Playground
Comment réduire même un peu la charge du programme lors de la combinaison de caractères avec JAVA
Comment créer un fichier jar et un fichier war à l'aide de la commande jar
[Rails / Routing] Comment faire référence au contrôleur dans votre propre répertoire
Comment annuler la fusion de cellules dans une plage spécifiée avec POI
Comment créer un conteneur Java