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