Méthode listFiles() de Java File
listFiles()En Java, la méthode estjava.io.Fileune méthode importante fournie par la classe, utilisée pour obtenir tous les fichiers et sous-répertoires du répertoire courant. Cette méthode renvoie unFiletableau d'objets, chaqueFileobjet représente un fichier ou un sous-répertoire du répertoire.
Syntaxe de la méthode
listFiles()La méthode possède les formes surchargées suivantes :
public File[] listFiles(FilenameFilter filter)
public File[] listFiles(FileFilter filter)
Utilisation de base
Obtenir tous les fichiers et sous-répertoires du répertoire
Sans aucun paramètre, l'utilisation la plus basique consiste à appeler directementlistFiles()la méthode :
Exemple
public class ListFilesExample {
public static void main(String[] args) {
// Créer un objet File pour représenter le répertoire
File directory = new File("C:/example");
// Obtenir tous les fichiers et sous-répertoires du répertoire
File[] files = directory.listFiles();
// Parcourir et afficher les noms de fichiers
if (files != null) {
for (File file : files) {
System.out.println(file.getName());
}
}
}
}
Paramètres de méthode
Interface FilenameFilter
FilenameFilterest une interface fonctionnelle utilisée pour filtrer les noms de fichiers :
Exemple
Exemple : lister uniquement.txtfiles
Exemple
File[] textFiles = directory.listFiles((dir, name) -> name.endsWith(".txt"));
Interface FileFilter
FileFilterest également une interface fonctionnelle, mais elle est basée surFileobjets pour le filtrage :
Exemple
Exemple : lister uniquement les répertoires
Exemple
File[] subDirectories = répertoire.listFiles(File::isDirectory);
Notes
Vérification de pointeur null: Si
Filel'objet n'est pas un répertoire ou n'a pas la permission de lecture,listFiles()renverranull, donc vous devez vérifier la valeur de retour.Considérations de performance: Pour les répertoires contenant un grand nombre de fichiers,
listFiles()peut consommer beaucoup de mémoire car il charge toutes les informations de fichier en une seule fois.Problèmes de tri: Le tableau de fichiers retourné ne garantit aucun ordre particulier. Si un tri est nécessaire, vous pouvez trier le tableau manuellement.
Liens symboliques: Sur les systèmes Unix/Linux,
listFiles()il suivra les liens symboliques.
Exemples d'applications pratiques
Lister récursivement tous les fichiers
Exemple
public class RecursiveFileListing {
public static void listFilesRecursively(File directory) {
File[] files = directory.listFiles();
if (files != null) {
for (File file : files) {
if (file.isDirectory()) {
listFilesRecursively(file);
} else {
System.out.println(file.getAbsolutePath());
}
}
}
}
public static void main(String[] args) {
listFilesRecursively(new File("C:/example"));
}
}
Utilisation de l'API Stream de Java 8
Exemple
import java.util.Arrays;
import java.util.stream.Stream;
public class FileStreamExample {
public static void main(String[] args) {
File directory = new File("C:/example");
// Utiliser Stream pour traiter les fichiers
Stream.of(directory.listFiles())
.filter(File::isFile)
.map(File::getName)
.forEach(System.out::println);
}
}
Alternatives
À partir de Java 7, vous pouvez envisager d'utiliserjava.nio.filedans le packageFilesetPathclasses, qui offrent une façon plus moderne d'effectuer des opérations sur les fichiers :
Exemple
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.stream.Stream;
public class NioFileListing {
public static void main(String[] args) throws Exception {
Path dir = Paths.get("C:/example");
try (Stream<Path> stream = Files.list(dir)) {
stream.filter(Files::isRegularFile)
.map(Path::getFileName)
.forEach(System.out::println);
}
}
}
Résumé
listFiles()La méthode est un outil de base dans les opérations sur les fichiers en Java. Maîtriser son utilisation est très important pour la gestion des fichiers. Dans le développement réel, choisissez la méthode de filtrage appropriée en fonction des besoins spécifiques, et faites attention à gérer les exceptions possibles. Pour les nouveaux projets, envisagez d'utiliser Java NIO. SaFilesclasse, qui offre des fonctionnalités de manipulation de fichiers plus puissantes et flexibles.
Java File