# 任务
了解 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 下午