Gradle-操作文件&文件拷贝

作者: 未见哥哥 | 来源:发表于2018-07-27 17:40 被阅读13次

    # 任务

    • 了解 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 下午

    相关文章

      网友评论

        本文标题:Gradle-操作文件&文件拷贝

        本文链接:https://www.haomeiwen.com/subject/wgmgmftx.html