Android Gradle学习记录3 Groovy处理文件

这篇博客记录一下Groovy处理文件时涉及的基本操作。

整体来说,Groovy的I/O操作是建立在Java的I/O操作之上的,
不过进行了更为简单的封装,并且利用Closure来简化代码的编写。

1 读文件
Groovy读取文件时,与Java一致,首先需要创建文件对应的对象,
对应的操作类似于:

def targetFile = new File("/home/zhangjian/Desktop/file.txt")

1.1 读取文件的每一行
创建出文件对应的对象后,可以直接利用eachLine接口读取文件的每一行。
eachLine接口的参数为一个Closure,类似的用法类似于:

targetFile.eachLine { String oneLine ->
    println oneLine
}

1.2 得到文件的全部内容
如果需要直接得到文件中的全部内容,可以利用文件对象的getBytes接口:

//该接口返回的是文件内容对应的byte[]
def bytes = targetFile.getBytes()
//与上述接口对应,还可以直接使用targetFile.bytes这个属性获取文件内容

1.3 获取文件对应的inputStream
与Java一样,Groovy中的文件也可以利用inputStream来进行操作,
对应的操作类似于:

//实际上获取的是Java中的BufferedInputStream
def ism = targetFile.newInputStream()
//利用inputStream的接口进行相关操作
println ism.readLines()
//使用完毕后同样需要关闭
ism.close()

当然,Groovy中的file对象有一个withInputStream接口,可以接受一个Closure对象作为参数。
在接口中可以仅关注inputStream的相关的操作,不用负责关闭inputStream。
类似的操作类似于:

targetFile.withInputStream { ism ->
    println ism.readLines()
}

2 写文件
与读文件类似,Groovy同样可以利用Java中outputStream来进行写文件相关的操作。
类似的操作如下:

//这里获取的实际是Java中的BufferedOutputStream
def osm = targetFile.newOutputStream()
osm.write("just a test".getBytes())
osm.close()

同样,file对象同样有一个withOutputStream接口,可以简化outputStream相关的操作:

targetFile.withOutputStream {  osm ->
    osm.write("just a new test".getBytes())
}

最后,Groovy中的outputStream重载了<<操作符,
可以比较方便地完成文件的复制,对应的操作类似于:

def srcFile = new File("/home/zhangjian/Desktop/file.txt")
def dstFile = new File("/home/zhangjian/Desktop/dst.txt")

dstFile.withOutputStream {  osm ->
    srcFile.withInputStream {  ism ->
    //直接将inputStream中读取到的内容写入到outputStream
        osm << ism
    }
}

3 XML操作
Groovy中解析XML文件的操作比较直观,主要用到了GPathResult对象。
我们通过一个例子,很容易明白它的用法。

我们以Android中应用stk为例,看看Groovy如何解析其对应的AndroidManifest.xml。
xml文件的内容如下:

<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2007 The Android Open Source Project

     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at

          http://www.apache.org/licenses/LICENSE
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值