# 任务
- 了解 Project 中操作文件的相关 API;
- 代码演示-文件路径相关API;
- 代码演示-file(path)相关API;
- 代码演示-fileTree(path,closure)相关API;
- 练习-文件拷贝;
# 操作文件相关 API
下面列举一下 Project 中关于操作文件相关的 API 。
方法名 | 作用 |
---|---|
project.getBuildDir(); | 获取module的build文件夹所在路径的File对象 |
File getRootDir(); | 获取根module所在路径的的File对象 |
File getBuildFile(); | 获取当前module对应的build.gradle文件对象 |
File file(Object path); | 根据指定的path路径获取对应的文件对象 |
ConfigurableFileCollection files(Object… paths); | 获取包含文件的ConfigurableFileCollection对象 |
ConfigurableFileTree fileTree(Object baseDir, Closure configureClosure); | 将指定路径下所有的文件封装成一个文件数 |
… | … |
# 代码演示
- 文件路径相关API
下面的代码块,打印了相关的 api 的调用 和输出对应输出的值。
println project.rootDir// /Users/zeal/dev/as_code/GradleDemo
println project.getBuildFile()// /Users/zeal/dev/as_code/GradleDemo/build.gradle
println project.getBuildDir()// /Users/zeal/dev/as_code/GradleDemo/build
- 通过
file(path)
得到build.gradle
的内容
println file("app/build.gradle").getText()
- 调用重载的 file(…) 可以操作多个文件
ConfigurableFileCollection configurableFileCollection = files("settings.gradle", "app/build.gradle")
//遍历每一个文件
configurableFileCollection.files.each {
File file ->
println file.text
}
- 上面的实现方式也可以使用
fileTree(path,closure)
将指定路径下所有的文件封装成一个文件数对象
fileTree("app/build/outputs/apk") { ConfigurableFileTree configurableFileTree ->
//遍历
configurableFileTree.visit { FileVisitDetails fileVisitDetails ->
//在这里操作文件...
println "the file's name is ${fileVisitDetails.name}"
}
}
# 练习-文件拷贝
方法名 | 作用 |
---|---|
WorkResult copy(Closure closure); | 拷贝 |
在实际开发过程中,如果我们想要在
APK
打包完毕之后将APK
文件拷贝到文件系统某一个位置中,就可以使用到这个copy
方法来实现。
copy() {
//闭包参数
CopySpec copySpec ->
//from 是一个方法,指定拷贝的源文件/文件夹>file("app/build/output/apk") 是方法的参数
from file("app/build/outputs/apk")
//into 是一个方法:指定拷贝的目的地>拷贝到根工程的output目录下
into "${rootDir}/output"
//重命名拷贝的文件名字
rename {
String srcFileName ->
"${srcFileName}-haha.apk"
}
//移除不需要拷贝的内容 不拷贝 .json 结尾的文件
exclude '**/*.json'
}
记录于 2018-07-27 下午