Tomar el directorio d:/a como ejemplo, suponiendo que la estructura en el directorio d:/a es el siguiente:
D:/a | --a.sql |--back.log | --b | | --e | | ---1.txt | | --2.txt | | --3.txt | `--F | | --4.txt | | --5.txt | `--6.txt | --c | | --e | | --ACE1.txt | | --ACE2.txt | | --ACE3.txt | `--F | | --4.txt | | --5.txt | `--6.txt`-d | --a.java | --abc (1) .txt | --abc (2) .txt | --abc (3) .txt | --b.java`--c.java
4.1 Ejemplo 1: Lista de archivos en todo el directorio (recursivo)
Ideas:
1.Transfer el directorio d:/a.
2. Cada vez que atraviesa un directorio en D:/A, itera sobre este subdirectorio. Por lo tanto, es necesario determinar si cada elemento atravesado es un directorio.
Estos son algunos de los códigos del código normal al código recursivo:
Archivo dir = new File ("d:/a"); file [] file_list = dir.listfiles (); for (list de archivo: file_list) {if (list.isDirectory ()) {file dir_1 = list.listFiles (); // El código comienza aquí y puede ser recursivo lógicamente infinitamente if (dir_1.isDirectory ()) {....}} else {system.out.println (list.getabsolutePath ()); }}Las piezas del código repetido están encapsuladas, por lo que el método recursivo se usa para encapsular el código y resolver el problema recursivo infinito. El código final es el siguiente:
import java.io.*; public class ListAllFiles {public static void main (string [] args) {file dir = new File ("d:/a"); System.out.println ("Dir ------>"+Dir.getabsolutePath ()); listall (dir); } public static void listAll (archivo dir) {file [] file_list = dir.listFiles (); for (archivo archivo: file_list) {if (file.isDirectory ()) {System.out.println ("Dir ------>"+File.getabSolutePath ()); listAll (archivo); } else {system.out.println ("archivo ------->"+file.getabsolutePath ()); }}}}4.2 Ejemplo 2: Lista de archivos (cola) en todo el directorio
Ideas:
1. Iterer sobre el directorio dado. Coloque el nombre del directorio que atravesó en la colección.
2. Iterer sobre cada elemento de directorio en la colección y agregar los subdirectorios atravesados a la colección. Finalmente, elimínelo de la colección después de cada recorrido.
3. De esta manera, mientras se encuentre el directorio, continuará atravesando hasta que se atraviese un determinado directorio y el próximo directorio al mismo nivel comenzará a atravesar.
Qué considerar es qué tipo de colección usar. En primer lugar, los elementos de directorio en la colección no necesitan ser ordenados, y los nombres de subdirectorio en diferentes directorios pueden repetirse. Por lo tanto, la colección de listas se usa en lugar de la colección de conjuntos. Debido a que los elementos se agregan y eliminan con frecuencia, se usa la LinkedList en lugar de la colección ArrayList. La característica más destacada de la colección Linkedlist es la cola FIFO.
En comparación con el recorrido recursivo, la ventaja de usar colas para atravesar el directorio es que los elementos se colocan en contenedores, y todos están en la memoria de montón, lo que dificulta el desbordamiento de la memoria.
import java.util.*; import java.io.*; public class listAllFiles2 {public static void main (string [] args) {file dir = new File ("d:/a"); Queue <Schil> file_queue = new Queue <Schil> (); // construir un archivo de cola [] list = dir.listFiles (); for (archivo de archivo: list) {// Transular el directorio de nivel superior if (file.isDirectory ()) {System.out.println ("Dir ----->"+file.getabsolutePath ()); file_queue.add (archivo); } else {system.out.println ("archivo ------>"+file.getabsolutePath ()); }} while (! file_queue.isnull ()) {// Iniciar desde el subdirectorio secundario, Traverse File subdirs = file_queue.get (); // Primero obtenga el archivo de nombre de subdirectorio secundario [] subfiles = subdirs.listfiles (); for (archivo subdir: subfiles) {// Transtraight Cada subdirectorio de siguiente nivel if (subdir.isDirectory ()) {System.out.println ("Dir ------>"+subdir.getabsolutePath ()); file_queue.add (subdir); // Si hay un subdirectorio en la capa interna, agregue a la cola} else {system.out.println ("file ------->"+subdir.getabsolutePath ()); }}}}}}}}} Class Queue <E> {private LinkedList <E> LinkedList; Queue () {LinkedList = new LinkedList <E> (); } public void add (e e) {LinkedList.addfirst (e); // avanzado} public e get () {return LinkedList.removelast (); // primero out} public boolean isNull () {return LinkedList.isEmpty (); }}4.3 Ejemplo 3: La estructura de árbol muestra archivos en todo el directorio (recursivo)
Ideas:
1. Primero enumere los directorios y archivos de primer nivel.
2. Si es un directorio, agregue un símbolo de prefijo que forma una forma de árbol. Luego iterar a través de este directorio, que requiere un recorrido recursivo.
import java.io.*; Public Class TreeFiles {public static void main (string [] args) {file dir = new File ("d:/a"); System.out.println (dir.getName ()); Listchilds (Dir, 1); } public static void listchilds (archivo f, int nivel) {string prefix = ""; for (int i = 0; i <nivel; i ++) {prefix = "|"+prefijo; } Archivo [] archivos = f.listFiles (); for (archivo archivo: archivos) {if (file.isDirectory ()) {system.out.println (prefix + file.getName ()); ListChilds (archivo, nivel+1); } else {System.out.println (prefix + file.getName ()); }}}}Los resultados son los siguientes:
A | A.SQL | B | | E | | 1.txt | | | 2.txt | | | 3.txt | | f | | 4.txt | | | 5.txt | | | 6.txt | back.log | c | | E | | | Ace1.txt | | | Ace2.txt | | | Ace3.txt | | f | | | 4.txt | | | 5.txt | | | 6.txt | D | | A.Java | | ABC (1) .txt | | ABC (2) .txt | | ABC (3) .txt | | B.Java | | C.Java
4.4 Eliminar todo el directorio
import java.io.*; clase pública FileDelete {public static void main (string [] args) {archivo file = nuevo archivo ("d:/a"); rm (archivo); } public static void rm (archivo f) {if (! f.exists ()) {system.out.println ("Archivo no encontrado!"); devolver; } else if (f.isFile ()) {f.delete (); devolver; } Archivo [] dir = f.listFiles (); for (archivo archivo: dir) {rm (archivo); } f.delete (); }}Resumir
El anterior es la lista de archivos de directorio de visualización de Java y Eliminar directorio introducido por el editor. Espero que sea útil para todos. Si tiene alguna pregunta, déjame un mensaje y el editor responderá a todos a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!