gradle-groovy脚本
来源:互联网 发布:超级课程表 知乎 编辑:程序博客网 时间:2024/04/30 16:02
gradle -groovy脚本
Groovy注释标记和Java一样,支持//或者/**/ Groovy语句可以不用分号结尾。Groovy为了尽量减少代码的输入,确实煞费苦心 Groovy中支持动态类型,即定义变量的时候可以不指定其类型。Groovy中,变量定义可以使用关键字def。注意,虽然def不是必须的,但是为了代码清晰,建议还是使用def关键字 字符串类型中双引号""的内容则和脚本语言的处理有点像,如果字符中有$号的话,则它会$表达式先求值。
Groovy中的容器类很简单,就三种:
List:链表,其底层对应Java中的List接口,一般用ArrayList作为真正的实现类。 Map:键-值表,其底层对应Java中的LinkedHashMap。 Range:范围,它其实是List的一种拓展。def aList = [5,'string',true] //List由[]定义,其元素可以是任何对象def aMap = ['key1':'value1','key2':true] def aRange = 1..5 <==Range类型的变量 由begin值+两个点+end值表示闭包,英文叫Closure,是Groovy中非常重要的一个数据类型或者说一种概念了。闭包的历史来源,种种好处我就不说了。我们直接看怎么使用它!def aClosure = { //闭包是一段代码,所以需要用花括号括起来.. String param1, int param2 -> //这个箭头很关键。箭头前面是参数定义,箭头后面是代码 println"this is code" //这是代码,最后一句是返回值, //也可以使用return,和Groovy中普通函数一样 }
Closure使用中的注意点
1. 省略圆括号闭包在Groovy中大量使用,比如很多类都定义了一些函数,这些函数最后一个参数都是一个闭包。比如: public static <T> List<T> each(List<T> self, Closure closure)上面这个函数表示针对List的每一个元素都会调用closure做一些处理。这里的closure,就有点回调函数的感觉。但是,在使用这个each函数的时候,我们传递一个怎样的Closure进去呢?比如: def iamList = [1,2,3,4,5] //定义一个List iamList.each{ //调用它的each,这段代码的格式看不懂了吧?each是个函数,圆括号去哪了? println it }上面代码有两个知识点:each函数调用的圆括号不见了!原来,Groovy中,当函数的最后一个参数是闭包的话,可以省略圆括号。比如 def testClosure(int a1,String b1, Closure closure){ //do something closure() //调用闭包 }那么调用的时候,就可以这么调用 testClosure (4, "test", { println "i am in closure" } ) //括号可以不写..即如下调用 testClosure 4,'test' ,{println "i am in closure ..."}2. 如何确定Closure的参数 def iamList = [1,2,3,4,5] //定义一个List变量 iamList.each{ //调用它的each函数,只要传入一个Closure就可以了。 println it }查看List的Api可以了解到:each函数说明中,将给指定的closure传递Set中的每一个item。所以,closure的参数只有一个。
文件IO操作
整体说来,Groovy的I/O操作是在原有Java I/O操作上进行了更为简单方便的封装,并且使用Closure来简化代码编写。
例如 File类 http://docs.groovy-lang.org/latest/html/groovy-jdk/java/io/File.html
def targetFile = new File("fileName") <==File对象还是要创建的。
eachLine的唯一参数是一个Closure。Closure的参数是文件每一行的内容,其内部实现肯定是Groovy打开这个文件,然后读取文件的一行,然后调用Closure。
targetFile.eachLine{ String oneLine -> printl noneLine }
2 直接得到文件内容
targetFile.getBytes() <==文件内容一次性读出,返回类型为byte[]
注意前面提到的getter和setter函数,这里可以直接使用targetFile.bytes
3 使用InputStream.InputStream的SDK在 http://docs.groovy-lang.org/latest/html/groovy-jdk/java/io/InputStream.html
def ism = targetFile.newInputStream() //操作ism,最后记得关掉 ism.close
4 使用闭包操作inputStream,以后在Gradle里会常看到这种搞法
targetFile.withInputStream{ ism -> 操作ism. 不用close。Groovy会自动替你close }
5 写文件
def srcFile = new File("srcFile") def targetFile = new File("targetFile") targetFile.withOutputStream{ os-> srcFile.withInputStream{ ins-> os << ins //利用OutputStream的<<操作符重载,完成从inputstream到OutputStream //的输出 } }
阅读全文
0 0
- gradle-groovy脚本
- Gradle----Groovy
- 看懂Gradle脚本(3)- Groovy AST转换
- 看懂Gradle脚本(6)- Hello Groovy, Goodbye Getters&Setters
- groovy脚本
- gradle学习(7)-groovy
- Gradle详解+Groovy
- Gradle与Groovy
- Groovy&Gradle总结
- Gradle 打包 Groovy 脚本成 jar与上传到maven repository
- 看懂Gradle脚本(1)- Groovy语言的Map语法糖
- 看懂Gradle脚本(2)- Groovy语言的闭包语法
- 看懂Gradle脚本(4)- Groovy语法之运算符重载
- gradle使用的groovy基础知识
- gradle风格的groovy代码
- 使用groovy理解gradle配置文件
- Groovy(二):Gradle for Android
- Gradle系列之Groovy基础
- android app开机自起
- Sqlserver中存储过程和游标的一些使用例子
- oracle pl/sql
- WNDCLASS结构体
- ubuntu add/del user
- gradle-groovy脚本
- python代码
- Linux内核编译安装(1)——menuconfig
- css实现左边高度自适应右边高度
- 顺序查找
- 编译安装apache2.4.28错误
- gradle常用命令
- 质因数的个数
- android:windowSoftInputMode属性详解