返回介绍

文件操作 - 文件集合

发布于 2020-07-06 13:40:57 字数 4197 浏览 918 评论 0 收藏 0

文件集合表示一组文件,Gradle 使用 FileCollection 接口表示文件集合, Gradle API 中的许多项目都实现了这个接口,例如 dependency configurations .

获取 FileCollection 实例的一种方法是使用 Project.files() 方法.你可以传递任何数量的对象参数,这个方法能将你传递的对象集合转换为一组文件对象.files() 方法接收任何类型对象参数.每一个 file() 方法都依赖于项目目录(在第 15 章,第一小节中介绍).files()方法也接收 collections, iterables, mapsarrays 类型参数.这些参数的内容会被解析,然后被转换为文件对象.

例 15.2 创建文件集合

build.gradle

  1. FileCollection collection = files('src/file1.txt',
  2. new File('src/file2.txt'),
  3. ['src/file3.txt', 'src/file4.txt'])

文件集合可以被迭代器,使用迭代操作能够将其转换为其他的一些类型.你可以使用 + 操作将两个文件集合合并,使用 - 操作能够对一个文件集合做减法.下面一些例子介绍如何操作文件集合.

例 15.3 使用文件集合

build.gradle

  1. // 对文件集合进行迭代
  2. collection.each {File file ->
  3. println file.name
  4. }
  5. // 转换文件集合为其他类型
  6. Set set = collection.files
  7. Set set2 = collection as Set
  8. List list = collection as List
  9. String path = collection.asPath
  10. File file = collection.singleFile
  11. File file2 = collection as File
  12. // 增加和减少文件集合
  13. def union = collection + files('src/file3.txt')
  14. def different = collection - files('src/file3.txt')

你也可以向 files() 方法专递一个闭合或者可回调的实例参数.当查询集合的内容时就会调用它,然后将返回值转换为一些文件实例.返回值可以是 files() 方法支持的任何类型的对象.下面有个简单的例子来演示实现 FileCollection 接口

例 15.4 实现一个文件集合

build.gradle

  1. task list << {
  2. File srcDir
  3. // 使用闭合创建一个文件集合
  4. collection = files { srcDir.listFiles() }
  5. srcDir = file('src')
  6. println "Contents of $srcDir.name"
  7. collection.collect { relativePath(it) }.sort().each { println it }
  8. srcDir = file('src2')
  9. println "Contents of $srcDir.name"
  10. collection.collect { relativePath(it) }.sort().each { println it }
  11. }

使用 gradle -q list 输出结果

  1. > gradle -q list
  2. Contents of src
  3. src/dir1
  4. src/file1.txt
  5. Contents of src2
  6. src2/dir1
  7. src2/dir2

另外, files() 方法也接收其他类型的参数:

FileCollection

内容损坏的文件包含在文件集合中.

Task

任务的输出文件包含在文件集合中.

TaskOutputs

TaskOutputs 的输出文件包含在文件集合中

值得注意的是当有需要时文件集合的内容会被被惰性处理,就比如一些任务在需要的时候会创建一个 FileCollecion 代表的文件集合.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文