¿Cuál es la mejor forma de encontrar un directorio con un nombre específico en Java? El directorio que estoy buscando se puede ubicar en el directorio actual o en uno de sus subdirectorios.Búsqueda recursiva de un directorio en Java
Respuesta
Su solución incluirá el uso de File.listFiles(String)
Gracias Andrew. Tengo un límite de 1.6, pero me olvido de que otros no lo son. – MadcoreTom
* "Tengo una restricción de 1.6" * Como soy yo (excepto cuando vuelvo a sumergirme en el desarrollo 1.5 o posterior). Suerte esos documentos. tienen etiquetas '@ since' y el compilador tiene opciones de compilación cruzada como la 'prueba de ácido' de la compatibilidad de versiones. Me gustaría vincular a los últimos documentos de Java, incluso si las personas mencionaron que estaban desarrollando para Java 1.3. ;) –
Divide y vencerás? Un enfoque ingenuo: Por cada directorio, puede iniciar una tarea, se realiza lo siguiente:
- lista de todos los directorios
- si la lista contiene un directorio coincidente, grabados y salir de la aplicación
- iniciar una tarea para cada directorio.
Para recorrer el árbol de archivos, se puede utilizar la interfaz FileVisitor. Consulte el tutorial. Por favor, consulte Find sample codes también.
Esta es una solución mejor que @LetcoreTom's #listFiles, ya que le permite finalizar la caminata una vez que se encuentra el archivo. – Kong
Algo así como:
public static final File findIt(File rootDir, String fileName) {
File[] files = rootDir.listFiles();
List<File> directories = new ArrayList<File>(files.length);
for (File file : files) {
if (file.getName().equals(fileName)) {
return file;
} else if (file.isDirectory()) {
directories.add(file);
}
}
for (File directory : directories) {
File file = findIt(directory);
if (file != null) {
return file;
}
}
return null;
}
Como usted ha mencionado recursividad debe atender a este requerimiento
import java.io.File;
public class CheckFile {
private static boolean foundFolder = false;
public static void main(String[] args) {
File dir = new File("currentdirectory");
findDirectory(dir);
}
private static void findDirectory(File parentDirectory) {
if(foundFolder) {
return;
}
File[] files = parentDirectory.listFiles();
for (File file : files) {
if (file.isFile()) {
continue;
}
if (file.getName().equals("folderNameToFind")) {
foundFolder = true;
break;
}
if(file.isDirectory()) {
findDirectory(file);
}
}
}
}
¿Tengo la certeza de que este método no es reutilizable (moverlo a alguna clase de utilidad no funcionará), es decir, puede detectar carpetas solo una vez y una vez detectado 'foundFolder' seguirá siendo cierto? –
En Java 8 a través del streams API:
Optional<Path> hit = Files.walk(myPath)
.filter(file -> file.getFileName().equals(myName))
.findAny();
El #walk es perezoso, entonces cualquier short-circuiting terminal operation optimizará el IO requerido.
Eso compara 'java.nio.Path' de' Path.getFileName' con 'String'. Sugiero 'file.getFileName(). ToFile.getName()' sabiendo que esto parece complicado, quizás caro. –
O, usted debe utilizar el concepto de forma recursiva buscar el archivo hasta que se encontró: Aquí está el código:
String name; //to hold the search file name
public String listFolder(File dir) {
int flag;
File[] subDirs = dir.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.isDirectory();
}
});
System.out.println("File of Directory: " + dir.getAbsolutePath());
flag = Listfile(dir);
if (flag == 0) {
System.out.println("File Found in THe Directory: " + dir.getAbsolutePath());
Speak("File Found in THe Directory: !!" + dir.getAbsolutePath());
return dir.getAbsolutePath();
}
for (File folder : subDirs) {
listFolder(folder);
}
return null;
}
private int Listfile(File dir) {
boolean ch = false;
File[] files = dir.listFiles();
for (File file : files) {
Listfile(file);
if (file.getName().indexOf(name.toLowerCase()) != -1) {//check all in lower case
System.out.println(name + "Found Sucessfully!!");
ch = true;
}
}
if (ch) {
return 1;
} else {
return 0;
}
}
- 1. ¿Cómo excluir un directorio en una búsqueda recursiva usando grep?
- 2. Generar mapeo XML de una búsqueda de directorio recursiva
- 3. Copia recursiva del directorio
- 4. MEF plugin de búsqueda recursiva
- 5. Búsqueda recursiva de un nodo en un árbol no binario
- 6. Forma no recursiva de obtener todos los archivos en un directorio y sus subdirectorios en Java
- 7. Ejecutando archivos en un directorio de forma recursiva usando ruby
- 8. Lista de todos los archivos de un directorio de forma recursiva con Java
- 9. búsqueda recursiva y reemplazar usind Perl en cmd (Windows)
- 10. PHP mkdir ($ recursiva = true) salta último directorio
- 11. espacio extra para búsqueda recursiva en profundidad para almacenar rutas
- 12. ¿Una función de directorio de eliminación recursiva para PHP?
- 13. Profundidad no recursiva-Primera búsqueda (DFS) Uso de una pila
- 14. ejecutar un comando simple utilizando PowerShell de forma recursiva en un directorio
- 15. java retener información en la función recursiva
- 16. búsqueda en java ArrayList
- 17. Motor de búsqueda en Java?
- 18. Búsqueda de rango en Java
- 19. ¿Es posible solicitar de forma recursiva todos los archivos en un directorio en Ruby?
- 20. Eliminar un directorio al salir en Java
- 21. Oyente de directorio en Java
- 22. Powershell: Reemplazar cadena de forma recursiva en seleccionar a los sub-archivos de un directorio
- 23. Camina un directorio de forma recursiva en Qt, omite las carpetas "." y ".."
- 24. Usando wget para buscar de forma recursiva un directorio con archivos arbitrarios en él
- 25. java: archivo de búsqueda según su nombre en el directorio y subdirectorios
- 26. ¿Función de viaje de amplitud recursiva en Java o C++?
- 27. Análisis de consultas de búsqueda en Java
- 28. Búsqueda de ruta en un juego Java 2d?
- 29. Java - Búsqueda de datos en un sitio web
- 30. Comprobación recursiva usando Clearcase
[? ¿Qué has intentado] (http://www.whathaveyoutried.com/) O más bien, ¿cuáles son sus teorías basadas en probar los mejores 2 enfoques (encogimientos de hombros) en los que podría pensar? ¿O realmente significa esta pregunta "¿Me puedes dar el código?" –