English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Código completo de la exploración de archivos en la carpeta de fondo de Java

Primero, en Java, hay dos formas de recorrer todos los archivos en una carpeta:

1.El análisis recursivo es una de las primeras formas que piensan los desarrolladores, las ventajas del análisis recursivo son: relativamente simple de implementar, menos código, alta eficiencia de ejecución, pero las desventajas son: consume más memoria, requiere más hardware

// Análisis recursivo
 private void getDirectory(File file) {
 File flist[] = file.listFiles();
 if (flist == null || flist.length == 0) {
   return 0;
 }
 for (File f : flist) {
   if (f.isDirectory()) {
     //Aquí se enumerarán todas las carpetas
     System.out.println("Dir==>" + f.getAbsolutePath()); 
     getDirectory(f);
   } else {
     //Aquí se enumerarán todos los archivos
     System.out.println("file==>" + f.getAbsolutePath());
   }
 }
}

2.El análisis no recursivo es fácil de entender, pero el análisis no recursivo es difícil de entender, yo también lo pensé mucho, descubrí que Java tiene una LinkedList, que se entiende literalmente, es una lista para guardar archivos enlazados, si la tienes, es fácil de manejar, el pensamiento específico es así: mientras se recorre una carpeta, si es una carpeta, se agrega a la LinkedList, si es un archivo, se lista; así se completa la exploración de archivos y carpetas en este directorio, todas las carpetas se guardan en la LinkedList; por lo tanto, lo que queda es recorrer los archivos de las carpetas en la LinkedList, el método de recorrida es el mismo que el anterior, si es una carpeta, se agrega a la LinkedList (Ps: la LinkedList durante el análisis siempre es la misma lista), por supuesto, después de extraer una carpeta de la lista, se debe eliminar la carpeta de la lista, aquí se utiliza LinkedList.removeFirst() para leer, lo que significa que se lee el primer elemento de la lista y se elimina de la lista. Así, cuando se recorre al estado de LinkedList.isEmty, significa que se ha completado el análisis.

// 非递归遍历
private void GetDirectorySize(File file) {
	LinkedList list = new LinkedList();
	//保存待遍历文件夹的列表
	GetOneDir(file, list);
	//调用遍历文件夹根目录文件的方法
	File tmp;
	while (!list.isEmpty()) {
		tmp = (File) list.removeFirst();
		//这个地方的判断有点多余,但是为了保险起见,还是给个判断了,正常情况下列表中只有文件夹
		//但是不排除特殊情况,例如:本身是文件夹的目标在压入堆栈之后变成了文件
		if (tmp.isDirectory()) {
			GetOneDirSize(tmp, list);
		} else {
			System.out.println("file==>" + tmp.getAbsolutePath());
		}
	}
}
// 遍历指定文件夹根目录下的文件
private void GetOneDir(File file , LinkedList list){
	//每次遍历文件夹都会调用该方法
	System.out.println("Dir==>" + f.getAbsolutePath());
	File[] files = file.listFiles();
	sumdir += 1;
	if (files == null || files.length == 0) {
		return ;
	}
	for (File f : files) {
		if (f.isDirectory()) {
			list.add(f);
		} else {
			//这里列出当前文件夹根目录下的所有文件
			System.out.println("file==>" + f.getAbsolutePath());
		}
	}
}

二、使用Java遍历一个文件夹并获取其中的所有内容

package demo0;823;
import java.io.File;
import java.util.ArrayList;
public class FileTest {
	private static ArrayList<String> fileList = new ArrayList<String>();
	public static void main(String[] args) {}}
		String filepath = "G:\\Test\\icon";
		getFiles(filepath);
	}
	static void getFiles(String filepath){
		File root = new File(filepath);
		File[] files = root.listFiles();
		for (File file : files){
			if(file.isDirectory()){
				//si file es un directorio, llamar recursivamente a la caja
				//llamada recursiva
				getFiles(file.getAbsolutePath());
				fileList.add(file.getAbsolutePath());
				System.out.println("Mostrar"+filepath+"de todos los subdirectorios y archivos"+file.getAbsolutePath());
			}
				//no es un directorio, recorrer sus archivos subyacentes
				System.out.println("Mostrar"+filepath+"de todos los subarchivos"+file.getAbsolutePath());
			}
		}
	}
}

Imágenes de ejemplo:

Resumen

Este es el contenido completo del código de recorrido de archivos en la carpeta de fondo de Java en este artículo, espero que sea útil para todos. Los amigos interesados pueden continuar consultando otros temas relacionados en este sitio, y si hay alguna deficiencia, son bienvenidos a dejar comentarios. Agradecemos el apoyo de los amigos a este sitio!

Declaración: El contenido de este artículo se ha obtenido de la red, pertenece al autor original, el contenido se ha contribuido y subido por los usuarios de Internet de manera autónoma. Este sitio no posee los derechos de propiedad, no ha sido editado por humanos y no asume ninguna responsabilidad legal. Si encuentra contenido sospechoso de infracción de derechos de autor, le invitamos a enviar un correo electrónico a: notice#oldtoolbag.com (al enviar un correo electrónico, reemplace # con @) para denunciar y proporcionar evidencia relevante. Una vez verificada, este sitio eliminará inmediatamente el contenido sospechoso de infracción.

Tutoriales de Elasticsearch