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             //的输出         }      } 
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 开发商对接的银行利息比较高怎么办 工作未满一年离职转正定级怎么办 被网络骗贷翻到几十万怎么办 面试通过后迟迟不通知入职怎么办 厂里捡到饭卡花了里面的钱怎么办 上班用自己手机打卡没电怎么办 逸尚考勤机显示超出考勤记录怎么办 下雨穿套裙工装上班好冷怎么办 蚂蚁借呗放款中不到账怎么办 护士电子化注册没有激活码怎么办? 地铁站务员入职体检身高差点怎么办 车子钥匙锁在车里了怎么办 打错账户了怎么办5天了 下岗失业人员在就业后档案怎么办 皮秒祛斑后没有敷面膜怎么办 硕士毕业工资好低不想工作怎么办 车卖了etc忘拿了怎么办 成熟卵泡打破卵针也不破怎么办? 深圳孩子户口挂别人名下上学怎么办 襄阳东风合运花园房贷怎么办下来 猫在外面躲起来找不到了怎么办 本科三批取消以后三本学校怎么办 机票名字多了个字母安检怎么办 出隧道口限速40超速了怎么办 社保交了五年后断交以后该怎么办 躺椅折叠椅坐的地方坏了怎么办 苹果手机锁频密码忘了怎么办 客户要货公司不给进怎么办 高铁23:00买的票怎么办 带电子手刹的车刹车失灵怎么办 下坡刹车失灵遇行人不看车怎么办 跟大车后面看不见红灯闯了怎么办 跟着大货车后面闯了红灯怎么办 如果用工单位不发放加班工资怎么办 事故家属要司机向医院多交钱怎么办 在大学里和室友关系弄僵怎么办 房产证办出来房产局不给证怎么办 单位全员竞聘老员工没岗位怎么办 快件被快递公司签收了没给送怎么办 总公司跑路了分公司代理法人怎么办 大使馆领的结婚证现在离婚怎么办