Maison >Java >javaDidacticiel >Comment parcourir efficacement un répertoire de fichiers et ses sous-répertoires en Java ?
Itération dans les sous-répertoires d'un répertoire de fichiers en Java
Lorsque vous travaillez avec des fichiers en Java, il est souvent nécessaire d'accéder non seulement aux fichiers d'un répertoire mais aussi ceux de ses sous-répertoires. Cela pose la question : comment pouvons-nous naviguer efficacement dans un répertoire et ses sous-répertoires en Java ?
Récursion : une approche standard
Une technique standard d'itération de répertoire consiste à utiliser récursivité. En testant si un fichier donné est un répertoire à l'aide de la méthode File#isDirectory(), vous appelez récursivement la même méthode avec ses résultats File#listFiles().
L'extrait de code suivant illustre cette approche récursive :
import java.io.File; public class Demo { public static void main(String... args) { File dir = new File("/path/to/dir"); showFiles(dir.listFiles()); } public static void showFiles(File[] files) { for (File file : files) { if (file.isDirectory()) { System.out.println("Directory: " + file.getAbsolutePath()); showFiles(file.listFiles()); // Calls same method again. } else { System.out.println("File: " + file.getAbsolutePath()); } } } }
Alternative Java 8 : récursivité de queue avec Files#walk()
Pour Java 8 et les versions ultérieures, la méthode Files#walk() fournit une alternative à la récursivité. Il utilise la récursion de queue, évitant le risque d'une StackOverflowError dans les situations avec des arborescences de répertoires profondes.
Voici comment utiliser Files#walk() pour l'itération de répertoire :
import java.io.File; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; public class DemoWithJava8 { public static void main(String... args) throws Exception { Path dir = Paths.get("/path/to/dir"); Files.walk(dir).forEach(path -> showFile(path.toFile())); } public static void showFile(File file) { if (file.isDirectory()) { System.out.println("Directory: " + file.getAbsolutePath()); } else { System.out.println("File: " + file.getAbsolutePath()); } } }
Conclusion
En tirant parti de la récursivité avec File#isDirectory() et File#listFiles() ou en en utilisant Files#walk() dans Java 8, vous pouvez parcourir efficacement les fichiers de répertoire et les fichiers de sous-répertoire dans une application Java.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!