Gradle之File操作

作者: 奔跑吧李博 | 来源:发表于2023-11-21 22:20 被阅读0次
File相关操作代码:
//Project.file() 方法能够相对项目目录定位一个文件
task filePosition {
    File configFile = file('mountains.xml')
    configFile = file(configFile.absolutePath)
    println(configFile.absolutePath)
    configFile = file(new File('src/build/config.xml'))
    configFile.mkdirs()
    println(configFile.absolutePath)
}

//根据一个 XML ,在build/generated下生成多个输出文件
task transform {
    def srcFile = file('mountains.xml')
    def destDir = new File(buildDir, 'generated')
    doLast {
        println "transforming source file."
        destDir.mkdirs()
        def mountains = new XmlParser().parse(srcFile) //解析mountains.xml文件得到节点
        mountains.children().each {
            def name = it.name()
            def destFile = new File(destDir, "${name}.txt")
            destFile.text = "$name"
        }
    }
}


//读写gradle.properties文件属性
task propertiesWrite {
    def defaultProps = new Properties()
    def propertiFile = new File(rootDir, "gradle.properties") //根目录下gradle.properties文件
    def inputStream = propertiFile.newDataInputStream()
    defaultProps.load(inputStream)  //Properties读取文件流

    defaultProps.setProperty("version", "1.1.0") //properti设置新属性
    def version = defaultProps.getProperty("version")  //properti读取新属性

    println("当前配置 version: " + version)
}
//打印  当前配置 version: 1.1.0

//创建文件集合,使用 FileCollection 接口表示文件集合
task collections {
    FileCollection collection = files('src/file1.txt', new File('src/file2.txt'), 'src/file3.txt')
    collection.each {
        println(it.absolutePath)
    }
    def files = collection.files //文件集合转set
    def list = collection as List //文件集合转list
    def union = collection + file('src/file4.txt')
    def different = collection - file('src/file3.txt')
}

//使用标准输出写入log信息
task loggerTask {
    logger.error("error message")
    logger.info("info message")
    logger.warn("warn message")
    logger.debug("debug message")
    logger.quiet("An info log message which is always logged.")
    logger.lifecycle("A lifecycle info log message.")
}

//文件树形操作
task fileTree {
    FileTree tree = fileTree('src/main/res')

    //遍历访问文件树的元素
    tree.visit { element->
        println "$element.file"
    }
}

//复制文件,任务类型为Copy,Copy类的父类定义好了from 和 into函数
task copyTask(type: Copy) {
    //因为在copy类型的task下,所以能直接用该task下的函数
    //包括函数 from to rename fileter等
    from('src/main/java')  //添加要复制的文件
    from('mountains.xml') //继续添加要复制的文件
    from file('src/main/res') //继续添加要复制的文件

    into('src/copyPath') //into表示要拷贝到的文件路径

//    rename { fileName ->  //文件重命名
//        fileName.relace('','')
//    }
}

参考:
https://juejin.cn/post/6844903838290296846#comment
https://doc.yonyoucloud.com/doc/wiki/project/GradleUserGuide-Wiki/index.html
demo参考:
https://github.com/running-libo/GradleStudy

相关文章

网友评论

    本文标题:Gradle之File操作

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