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

我知道Guava有一个复制方法,但是我怎样才能获得目录下的所有文件(如果起始目录下有一些目录,我也应该获得该目录下的文件,并且如果该目录下有任何目录,我应该也得到他们)

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

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

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

最佳答案

从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可以阅读的那样,您可以在三个不同的迭代顺序之间进行选择。

09-11 15:50