2011-06-06 181 views
5

我需要在目录树中根据其名称查找文件。然后显示该文件的路径。我发现了这样的东西,但它按照扩展名进行搜索。任何人都可以帮助我,我该如何重新编写代码以满足我的需求......谢谢java:根据目录和子目录中的名称搜索文件

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

你能提供一个链接到您在哪里找到代码?我不确定FileUtils是否是Java库的一部分,它可能是别人的自定义类...没关系,找到它,http://commons.apache.org/io/apidocs/org/apache/commons/ io/FileUtils.html – 2011-06-06 12:11:47

回答

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”;不错,但不起作用 – skaryu 2011-06-06 12:30:44

+0

@skaryu - 适用于我...你是否添加了包含条件的整个块? – Udi 2011-06-06 12:32:49

+0

oooo ...它的工作原理...非常感谢你 – skaryu 2011-06-06 12:40:24

2

Java中的递归目录搜索相当简单。 java.io.File类有一个listFiles()方法,该方法给出目录中的所有File子级;还有一个isDirectory()方法,您在File上调用以确定是否应递归搜索特定的孩子。

+0

有关java.io.file的文档可以在http://download.oracle.com/javase/6/docs/api/java/io/File.html找到 – 2011-06-06 12:17:31

0

我真的不知道FileUtils是做什么的,但如何将扩展中的“txt”更改为“yourfile.whatever”?

+0

FileUtils来自apache java库,显然,http://commons.apache.org/io/apidocs/org/apache/commons/io/FileUtils.html – 2011-06-06 12:16:56

+0

是的..更改扩展名不会工作.. – Udi 2011-06-06 12:21:23

+0

是的...它不起作用 – skaryu 2011-06-06 12:24:31

1

您可以使用FileFilter像这样。

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; 
} 

}

,并调用它像这样

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

这有一个问题:files = f.list(new MyFileNameFilter()); – skaryu 2011-06-06 12:28:56

+0

这是什么问题?我只是试了一下,它为我工作。 – sudmong 2011-06-06 12:30:30

+0

不能使用recursiveSearch类型的封闭实例。必须使用可在其顶部实现的recursiveSearch – skaryu 2011-06-06 12:35:45

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; 
} 
相关问题