Java directorioderecursivobuscar archivos en
Java Aquí presentamos un programa de muestra que busca recursivamente archivos en un directorio específico, incluidos subdirectorios, y obtiene una lista de archivos que coinciden con las condiciones de búsqueda.
Estos realizan el mismo procesamiento que el comando UNIX ls -R y el comando dir /s de Windows.
También puede especificar * como carácter comodín en el nombre del archivo que se va a buscar o utilizar expresiones regulares para buscar.
Como ejemplo de uso, en el siguiente caso, se busca recursivamente en el directorio filelist incluyendo subdirectorios para obtener una lista de archivos con la extensión java.
Archivo[] archivos = search.listFiles(“C:/filelist/”, “*.java”);
programa de muestra
/**
*
*/
clase pública Búsqueda de archivos {
int final estático público TYPE_FILE_OR_DIR = 1;
público estático final int TYPE_FILE = 2;
público estático final int TYPE_DIR = 3;
/**
* Desde el directorio especificado [directoryPath],
* Busque el archivo [nombre de archivo] que desea buscar de forma recursiva y encuentre el archivo correspondiente.
* Devuelve una lista de objetos de archivo.
*
* ejemplo)
* Archivo[] archivos =listFiles(“C:/filelist/”, “*.java”);
* El ejemplo anterior busca en la lista de archivos del directorio de forma recursiva y
* Obtener una lista de archivos con la extensión java.
*
* @param directorioPath Ruta que representa el directorio a buscar
* @param fileName Nombre del archivo a buscar
* Puede especificar * como carácter comodín en el nombre del archivo.
* @return Objeto de archivo que coincide con la búsqueda
*/
Archivo público [] lista de archivos (ruta del directorio de cadena, nombre de archivo de cadena) {
// Convertir * como carácter comodín en expresión regular
if (nombre de archivo! = nulo) {
nombre de archivo = nombre de archivo.replace(“.”, “\\.”);
nombre de archivo = nombre de archivo.replace(“*”, “.*”);
}
devolver listFiles (ruta del directorio, nombre de archivo, TYPE_FILE, verdadero, 0);
}
/**
* Desde el directorio especificado [directoryPath], especificado como una expresión regular
* Busque recursivamente el archivo a buscar [fileNamePattern],
* Devuelve una lista de objetos de archivo aplicables.
*
* También puede utilizar la condición de búsqueda para determinar si la fecha de actualización del archivo ha pasado la cantidad de días especificada.
*Se puede especificar.
*
* ejemplo)
* Archivo[] archivos =
* listFiles(“C:/filelist/”, “*.java”,TYPE_FILE, verdadero, 2);
* En el ejemplo anterior, la lista de archivos del directorio se busca de forma recursiva y se actualiza hace menos de 7 días.
* Obtener una lista de archivos con extensión java.
*
* @param directorioPath Ruta que representa el directorio a buscar
* @param fileNamePattern Nombre del archivo para buscar [expresión regular]
* @param tipo El objeto de archivo correspondiente se especifica mediante [tipo].
*Se puede especificar lo siguiente
* TYPE_FILE_OR_DIR・・・Archivo y directorio
* TYPE_FILE・・・Archivo
* TYPE_DIR・・・Directorio
* @param isRecursive true para buscar recursivamente
* @param period Busca archivos cuya fecha de actualización haya pasado el número de días especificado.
* Se puede configurar si
* No aplica si 0
* Si es 1 o más, busque archivos después del número de días especificado
* Si es menor que -1, busca archivos con una antigüedad superior al número de días especificado
* @return Objeto de archivo que coincide con la búsqueda
*/
Archivo público [] lista de archivos (ruta del directorio de cadenas,
String fileNamePattern, tipo int,
booleano es recursivo, int punto) {
Directorio de archivo = nuevo archivo (rutadeldirectorio);
si (!dir.isDirectory()) {
lanzar una nueva excepción IllegalArgumentException
(“Ruta especificada en el argumento [” + dir.getAbsolutePath() +
“] no es un directorio.”);
}
Archivo[] archivos = dir.listFiles();
// su salida
for (int i = 0; i < archivos.longitud; i++) {
Archivo archivo = archivos [i];
addFile(tipo, fileNamePattern, conjunto, archivo, punto);
// Busca recursivamente y agrega a la lista recursivamente si es un directorio
if (isRecursive && archivo.isDirectory()) {
listFiles(file.getAbsolutePath(), fileNamePattern,
tipo, esRecursivo, punto);
}
}
return (Archivo[]) set.toArray(nuevo archivo[set.size()]);
}
addFile privado vacío (tipo int, coincidencia de cadena, conjunto TreeSet,
Archivo de archivo, período int) {
cambiar (tipo) {
caso TYPE_FILE:
si (!archivo.isArchivo()) {
devolver;
}
romper;
caso TYPE_DIR:
si (!archivo.isDirectory()) {
devolver;
}
romper;
}
if (coincidencia! = nulo &&! archivo.getName().matches(coincidencia)) {
devolver;
}
// Si hay una especificación sobre si ha pasado el número de días especificado
si (punto! = 0) {
// fecha de actualización del archivo
Fecha última fecha de modificación = nueva fecha (archivo.última modificación ());
Cadena lastModifiedDateStr = nuevo SimpleDateFormat(“aaaaMMdd”)
.formato (última fecha de modificación);
// Fecha especificada (calculada en milisegundos por día)
un día largo = 24L * 60L * 60L * 1000L;
long periodTime = oneDayTime * Math.abs(period);
Fecha designadaFecha =
nueva Fecha(System.currentTimeMillis() – periodTime);
Cadena designadaDateStr = nuevo SimpleDateFormat(“aaaaMMdd”)
.format(fecha designada);
si (período > 0) {
if (lastModifiedDateStr.compareTo(designatedDateStr) < 0) {
devolver;
}
} demás {
if (lastModifiedDateStr.compareTo(designatedDateStr) > 0) {
devolver;
}
}
}
// Almacenar en la lista si se cumplen todas las condiciones
set.add(archivo);
}
/** Utilice TreeSet para ordenar alfabéticamente. */
conjunto TreeSet privado = nuevo TreeSet();
/**
* Si desea continuar usando la instancia después de crearla, use este método.
*La llamada debe ser liberada.
* ejemplo)
* Búsqueda de FileSearch = nueva FileSearch();
* Archivo[] f1 = search.listFiles(C:/filelist/”, “*.java”);
* buscar.clear();
* Archivo[] f2 = search.listFiles(“C:/filelist/”, “*.jsp”);
*/
vacío público claro(){
dejar en claro();
}
}
Resultado de la ejecución
Para comprobar el programa de muestra, creé un directorio de lista de archivos y preparé los siguientes archivos.
Se muestran el nombre del archivo y la fecha de actualización.
*Tenga en cuenta que la fecha actual es2007/08/18Supongamos que lo es.
C:\filelist │ aaa.java 2007/08/18 │ bbb.java 2007/08/18 └─dir ccc.java 2007/07/17 ddd.java 2007/08/18 eee.jpg 2007/08/16
◆Ejemplo de ejecución
System.out.println(“\n●Obtener todos los archivos”);
Archivo[] archivos = search.listFiles(ruta, nulo);
printFileList(archivos);
buscar.clear();
System.out.println(“\n●Obtener archivo con extensión java”);
archivos = search.listFiles(ruta, “*.java”);
printFileList(archivos);
buscar.clear();
System.out.println(“\n●Obtener todos los archivos y directorios”);
archivos = search.listFiles(ruta, nulo,search.TYPE_FILE_OR_DIR, verdadero, 0);
printFileList(archivos);
buscar.clear();
System.out.println(“\n●Obtener archivos actualizados dentro de los 2 días posteriores a la fecha actual”);
archivos = search.listFiles(ruta, nulo,search.TYPE_FILE, verdadero, 2);
printFileList(archivos);
buscar.clear();
System.out.println(“\n●Obtener archivos antiguos con más de 30 días de la fecha actual”);
archivos = search.listFiles(ruta, nulo,search.TYPE_FILE, verdadero, -30);
printFileList(archivos);
buscar.clear();
}
printFileList vacío estático privado (archivo [] archivos) {
for (int i = 0; i < archivos.longitud; i++) {
Archivo archivo = archivos [i];
System.out.println((i + 1) + “:” + archivo);
}
}
◆Resultado de salida
●Obtener todos los archivos 1: C:\filelist\aaa.java 2: C:\filelist\bbb.java 3: C:\filelist\dir\ccc.java 4: C:\filelist\dir\ddd.java 5: C:\filelist\dir\eee.jpg ●Obtener archivos con extensión java 1: C:\filelist\aaa.java 2: C:\filelist\bbb.java 3: C:\filelist\dir\ccc .java 4: C:\filelist\dir\ddd.java ●Obtener todos los archivos y directorios 1: C:\filelist\aaa.java 2: C:\filelist\bbb.java 3: C:\filelist\dir 4: C:\filelist \dir\ccc.java 5: C:\filelist\dir\ddd.java 6: C:\filelist\dir\eee.jpg ●Archivos actualizados dentro de los 2 días posteriores a la fecha actual Obtener 1: C:\filelist\aaa. java 2: C:\filelist\bbb.java 3: C:\filelist\dir\ddd.java 4: C:\filelist\dir\eee.jpg ●Fecha actual Obtener archivos antiguos con más de 30 días a partir del 1: C: \listadearchivos\dir\ccc.java