2013-07-26 36 views
-1

我已經編寫了一個程序,通過傳遞其擴展名來查找指定類型的所有文件。 我的問題是,程序僅在C驅動器中查找文件,但我想搜索整個硬盤。這裏是我的程序樣本如何在整個硬盤上找到給定擴展名的所有文件

public class Find { 

public static class Finder extends SimpleFileVisitor<Path> { 

    private final PathMatcher matcher; 
    private int numMatches = 0; 

    Finder(String pattern) 
    { 
     matcher = FileSystems.getDefault().getPathMatcher("glob:" + pattern); 
    } 

    // Compares the glob pattern against 
    // the file or directory name. 
    void find(Path file) 
    { 
     Path name = file.getFileName(); 
     if (name != null && matcher.matches(name)) 
     { 
      numMatches++; 
      System.out.println(file); 
     } 
    } 

    // Prints the total number of 
    // matches to standard out. 
    void done() 
    { 
     System.out.println("Matched: "+ numMatches); 
    } 

    // Invoke the pattern matching 
    // method on each file. 
    //@Override 
    public FileVisitResult visitFile(Path file,BasicFileAttributes attrs) 
    { 
     find(file); 
     return CONTINUE; 
    } 

    // Invoke the pattern matching 
    // method on each directory. 
    //@Override 
    public FileVisitResult preVisitDirectory(Path dir,BasicFileAttributes attrs) 
    { 
     find(dir); 
     return CONTINUE; 
    } 

    //@Override 
    public FileVisitResult visitFileFailed(Path file,IOException exc) 
    { 
     System.err.println(exc); 
     return CONTINUE; 
    } 
} 

static void usage() 
{ 
    System.err.println("java Find <path>" +" -name \"<glob_pattern>\""); 
    System.exit(-1); 
} 

public static void main(String[] args)throws IOException 
{ 

    if (args.length < 2) 
    { 
     usage(); 
    } 
    Path startingDir = Paths.get(args[0]); 
    String pattern = args[1]; 

    Finder finder = new Finder(pattern); 
    Files.walkFileTree(startingDir, finder); 
    finder.done(); 
} 

}

+0

「C drive only」和「whole hard disk」有什麼區別? – 2013-07-26 06:20:49

+0

在main方法中調用usage()後不應該有「return」語句嗎? – Henrik

+1

我已經使用了退出功能 – Vicky

回答

2

可以使用File.listRoots()方法來查找Windows上的所有驅動器。之後,只需在每個驅動器上進行獨立搜索。

使用新的API(java.nio.file)還有另一種方法:FileSystem.getDefault().getRootDirectories()

for (Path startingDir : FileSystem.getDefault().getRootDirectories()) { 
    // find files here 
} 
+0

我聽了很多關於listRoots方法的知識,但還沒有經過它。所以請你詳細說明一下?請@Joni – Vicky

+0

請分享一些關於你的帖子,可以幫助我 – Vicky

+0

由於你使用的是新的路徑API,最好使用第二種方法;請參閱更新。 – Joni

1

嘗試是這樣的

File folder = new File("D:\\DestFile"); 
    File[] listOfFiles = folder.listFiles(); 

    for (File file : listOfFiles) { 
    if (file.isFile()&& (file.getName().substring(file.getName().lastIndexOf('.')+1).equals("your_type"))) {// txt or docx or something 
    // do something 
    } 
    } 

試試這個。你可以通過這個方式讀取你電腦中的所有文件

public static void main(String[] args) { 
    File[] paths = File.listRoots(); 
    for(File directory:paths){ 
     getFile(directory.toString()); 
    } 
} 

public static void getFile(String directoryName) { 
    File directory = new File(directoryName); 
    File[] fList = directory.listFiles(); 
    if(fList!=null){ 
     for (File file : fList) { 
      if (file.isFile()) { 
       System.out.println(file.toString()); 
      } else if (file.isDirectory()) { 
       getFile(file.getAbsolutePath()); 
      } 
     } 
    } 

} 
+0

我很感謝你的迴應。但我希望我的程序能夠泛化。意味着它會搜索所有的分區,而不是在指定的分區 – Vicky

+0

@Vicky檢查我編輯的答案。 –

+0

woow ...謝謝你@Ruchira – Vicky

相關問題