文件树

文件树就是一个按照层次结构分布的文件集合,例如,一个文件树可以代表一个目录树结构或者一个 ZIP 压缩文件的内容.它被抽象为 FileTree 结构,FileTree 继承自 FileCollection,所以你可以像处理文件集合一样处理文件树, Gradle 有些对象实现了FileTree 接口,例如 源集合.
使用 Project.fileTree() 方法可以得到 FileTree 的实例,它会创建一个基于基准目录的对象,然后视需要使用一些 Ant-style 的包含和去除规则.

例 15.5 创建文件树
build.gradle

  1. /以一个基准目录创建一个文件树
  2. FileTree tree = fileTree(dir: 'src/main')
  3. // 添加包含和排除规则
  4. tree.include '**/*.java'
  5. tree.exclude '**/Abstract*'
  6. // 使用路径创建一个树
  7. tree = fileTree('src').include('**/*.java')
  8. // 使用闭合创建一个数
  9. tree = fileTree('src') {
  10. include '**/*.java'
  11. }
  12. // 使用map创建一个树
  13. tree = fileTree(dir: 'src', include: '**/*.java')
  14. tree = fileTree(dir: 'src', includes: ['**/*.java', '**/*.xml'])
  15. tree = fileTree(dir: 'src', include: '**/*.java', exclude: '**/*test*/**')

就像使用文件集合一样,你可以访问文件树的内容,使用 Ant-style 规则选择一个子树。

例 15.6 使用文件树
build.gradle

  1. // 遍历文件树
  2. tree.each {File file ->
  3. println file
  4. }
  5. // 过滤文件树
  6. FileTree filtered = tree.matching {
  7. include 'org/gradle/api/**'
  8. }
  9. // 合并文件树A
  10. FileTree sum = tree + fileTree(dir: 'src/test')
  11. // 访问文件数的元素
  12. tree.visit {element ->
  13. println "$element.relativePath => $element.file"
  14. }