2011-06-06 10 views
5

Necesito un archivo para buscar de acuerdo con su nombre en el árbol de directorios. Y luego mostrar una ruta a este archivo. Encontré algo como esto, pero busca según la extensión. Podría alguien me ayude, ¿cómo puedo volver a trabajar este código para mis necesidades ... graciasjava: archivo de búsqueda según su nombre en el directorio y subdirectorios

public class filesFinder { 
public static void main(String[] args) { 
    File root = new File("c:\\test"); 

    try { 
     String[] extensions = {"txt"}; 
     boolean recursive = true; 


     Collection files = FileUtils.listFiles(root, extensions, recursive); 

     for (Iterator iterator = files.iterator(); iterator.hasNext();) { 
      File file = (File) iterator.next(); 
      System.out.println(file.getAbsolutePath()); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
} 
+0

Podría dar un enlace a donde se encuentra el código de? No estoy seguro de que FileUtils sea parte de la biblioteca Java, podría ser la clase personalizada de otra persona ... no importa, lo encontré, http://commons.apache.org/io/apidocs/org/apache/commons/ io/FileUtils.html –

Respuesta

9
public class Test { 
    public static void main(String[] args) { 
     File root = new File("c:\\test"); 
     String fileName = "a.txt"; 
     try { 
      boolean recursive = true; 

      Collection files = FileUtils.listFiles(root, null, recursive); 

      for (Iterator iterator = files.iterator(); iterator.hasNext();) { 
       File file = (File) iterator.next(); 
       if (file.getName().equals(fileName)) 
        System.out.println(file.getAbsolutePath()); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

String fileName = "a.txt"; agradable, pero no funciona – skaryu

+0

@skaryu - Funciona para mí ... ¿Agregaste todo el bloque incluyendo la condición? – Udi

+0

oooo ... funciona ... muchas gracias – skaryu

2

búsqueda en el directorio recursivo en Java es bastante maldito fácil. La clase java.io.File tiene un método listFiles() que proporciona todos los elementos secundarios File de un directorio; también hay un método isDirectory() que llama en un File para determinar si debe buscar de forma recursiva a través de un niño en particular.

+0

Los documentos para java.io.file se pueden encontrar en http://download.oracle.com/javase/6/docs/api/java/io/File.html –

0

No sé realmente qué hace FileUtils, pero ¿qué le parece cambiar "txt" en extensiones a "yourfile.whatever"?

+0

FileUtils proviene de una biblioteca apache java , al parecer, http://commons.apache.org/io/apidocs/org/apache/commons/io/FileUtils.html –

+0

Sí ... cambiar la extensión no funcionaría ... – Udi

+0

sí ... no funciona – skaryu

1

Puede usar FileFilter Me gusta.

public class MyFileNameFilter implements FilenameFilter { 

@Override 
public boolean accept(File arg0, String arg1) { 
    // TODO Auto-generated method stub 
    boolean result =false; 
    if(arg1.startsWith("KB24")) 
     result = true; 
    return result; 
} 

}

y llamarlo como esto

File f = new File("C:\\WINDOWS"); 
    String [] files = null; 
    if(f.isDirectory()) { 

     files = f.list(new MyFileNameFilter()); 
    } 

    for(String s: files) { 

     System.out.print(s); 
     System.out.print("\t"); 
    } 
+0

hay un problema con esto: files = f.list (new MyFileNameFilter()); – skaryu

+0

¿cuál es ese problema? Lo probé y funcionó para mí. – sudmong

+0

No hay ninguna instancia adjunta de tipo recursivo. La búsqueda es accesible. Debe calificar la asignación con una instancia adjunta de tipo recursiveSearch – skaryu

0
public static File find(String path, String fName) { 
    File f = new File(path); 
    if (fName.equalsIgnoreCase(f.getName())) return f; 
    if (f.isDirectory()) { 
     for (String aChild : f.list()) { 
      File ff = find(path + File.separator + aChild, fName); 
      if (ff != null) return ff; 
     } 
    } 
    return null; 
} 
Cuestiones relacionadas