Google Guava迭代从Begin目录开始的所有文件

时间:2013-02-14 19:47:35

标签: java file guava

我在代码中使用Google Guava。从一个目录开始,我希望逐个获取所有文件(如果当前文件是一些特殊文件,我将在其中进行一些处理),最后我将它们复制到另一个目录(某些目录除外)。 p>

我知道在Guava有一个复制方法但是如何在目录下获取所有文件(如果在起始目录下有一些目录,我应该在它下面获取文件,如果有一些目录下有一些目录)目录我也应该得到它们)

PS 1:如果有任何复制文件的建议,欢迎您。

PS 2:我认为此对话与我的问题有关:http://code.google.com/p/guava-libraries/issues/detail?id=578

PS 3:我在项目中使用Java 6。

3 个答案:

答案 0 :(得分:14)

自Guava 15起,您可以使用Files.fileTreeTraverser()

用法非常简单:

File rootDir = ...; //this is your root directory
for (File f : Files.fileTreeTraverser().preOrderTraversal(rootDir)) {
    // do whatever you need with the file/directory

    // if you need the relative path, with respect to rootDir
    Path relativePath = rootDir.toPath().getParent().relativize(f.toPath());
}

正如您可以从TreeTraverser's javadoc读取的那样,您可以选择三种不同的迭代顺序。

答案 1 :(得分:2)

如果您有权访问Java 7,请使用walkFileTree中的Files

答案 2 :(得分:0)

  • 通过Guava复制文件

    在Guava 14.0中可以找到一些Files.copy重载方法,用于单个文件复制。

  • 漫步文件

    正如一些人建议的那样,你可以使用递归调用。 (你提到的DirectoryScanner很好)