Gradle_02 groovy文件读写

445 阅读2分钟

1 json操作

//实体转json
def list = [new Person(name:'John',age:25),
            new Person(name:'Magor',age:26)]
println JsonOutput.toJson(list)//[{"age":25,"name":"John"},{"age":26,"name":"Magor"}]

def json = JsonOutput.toJson(list)
println JsonOutput.prettyPrint(json)//带格式的json
//json转实体
//def jsonSlpuer = new JsonSlurper()
//jsonSlpuer.parse()

//模拟真实网络请求
//def getNetworkData (String ){
//    //发送http请求
//    def connection = new URL(url).openConnection()
//    connection.setRequestMethod('GET')
//    connection.connect()
//    def response = connection.content.text
//    //将 json 转化为实体对象
//    def jsonSluper = new JsonSlurper()
//    jsonSluper.parse(response)
//}
//def response = getNetworkData('http://xxx.com')
//println response.data.head.name

def responseString = "{\"age\":26,\"name\":\"Magor\"}"
def jsonSluper = new JsonSlurper()
def data =jsonSluper.parseText(responseString)
jsonSluper.
println data.name //Magor

2 xml解析

final String xml = '''
                    <breakfast_menu>
                        <food>
                            <name id ="100">Belgian Waffles</name>
                            <price>$5.95</price>
                            <calories>900</calories>
                        </food>
                        <food>
                            <name id ="101">Strawberry Belgian Waffles</name>
                            <price>$7.95</price>
                            <calories>900</calories>
                        </food>
                    </breakfast_menu>
                    '''
//开始解析此xml数据
def xmlSluper = new XmlSlurper()
def menu = xmlSluper.parseText(xml)
//通过.text()调用节点值
println menu.food[0].name.text()//Belgian Waffles
//通过@调用节点属性值
println menu.food[0].name.@id//100

def list = []
menu.each{ foods ->
    //下面开始对食物进行遍历
    foods.food.each { food->
        list.add(food.name.text())
    }
}
println list //[Belgian Waffles, Strawberry Belgian Waffles]

//深度遍历
def foods = menu.depthFirst().findAll{food ->
    return food.calories.text()=='900'
}
println foods//[Belgian Waffles$5.95900, Strawberry Belgian Waffles$7.95900]
//广度遍历
def names = menu.children().findAll {node ->
    node.name()== 'food'&& node.name.@id.text().contains ('10')
}.collect{node ->
    return node.name.text()
}
println names//[Belgian Waffles, Strawberry Belgian Waffles]

3 生成xml格式数据

/**
 * 手写生成xml
 */
def sw = new StringWriter()
def xmlBuilder = new MarkupBuilder(sw) //用来生成xml数据的核心类
//根节点langs创建成功
xmlBuilder.langs(type:'current',count:'3',mainstream:'true') {
    //第一个language节点
    language(flavor:'static',version:'1.8','Java'){
        age('16')
    }
    language(flavor:'dynamic',version:'1.6','Groovy')
    language(flavor:'dynamic',version:'1.9','JavaScript')
}
println sw
println '-----------------'
/**
 * 实体转xml
 */
def langs = new Langs()
xmlBuilder.langs(type:langs.type,count:langs.count,mainstream: langs.mainstream){
    langs.languages.each {lang ->
        language(flavor:lang.flavor,version:lang.version,value:lang.value)
    }
}
println sw
//对应xml中langs节点
class Langs{
    String type = 'current'
    int count = 3
    boolean mainstream = true
    def languages = [new Language(flavor:'static',version:'1.8',value:'Java'),
                     new Language(flavor:'dynamic',version:'1.6',value:'Groovy'),
                     new Language(flavor:'dynamic',version:'1.9',value:'JavaScript')]
}
//对应xml中language节点
class Language{
    String flavor
    String version
    String value
}

4 文本文件处理

def file = new File('../../Gradle_practice.iml')
//遍历文件内容
file.eachLine {line ->
    println line
}
//groovy getText获取文件内容
def txt = file.getText()
println txt
//返回的是一个list
def result = file.readLines()
println result
//reader 读取文件部分内容
def reader = file.withReader {reader->
    char[] buffer = new char[100]
    reader.read(buffer)
    return buffer
}
println reader

//reader和writer拷贝文件
def copyResult = copy('../../Gradle_practice.iml','../../Gradle_practice_copy.iml')
println copyResult
def copy(String sourcePath ,String desPath){
    try {
        //首先创建目标文件
        def desFile = new File(desPath)
        if (!desFile.exists()){
            desFile.createNewFile()
        }
        //todo 判断源文件是否存在
        //开始copy
        new File(sourcePath).withReader {reader ->
            def lines = reader.readLines()
            desFile.withWriter {writer ->
                lines.each {line->
                    writer.append(line+'\r\n')
                }
            }
        }
        return true
    } catch (Exception e) {
        e.printStackTrace()
    }
}

5 对象读写

def saveObject (Object object,String path){
    try {
        //首先创建目标文件
        def desFile = new File(path)
        if (!desFile.exists()){
            desFile.createNewFile()
        }
        desFile.withObjectOutputStream {out ->
            out.writeObject(object)
        }
        return true
    } catch (Exception e) {
        e.printStackTrace()
    }
    return false
}

def readObject(String path){
    def obj = null
    try {
        def file = new File(path)
        if (file == null||!file.exists())return null
        //从文件中读取对象
        file.withObjectInputStream {input ->
            obj = input.readObject()
        }
    } catch (Exception e) {
        e.printStackTrace()
    }
    return obj
}
//写对象
def person = new Person(name:'Android',age:26)
saveObject(person,'../../person.bin')
//读对象
def result = (Person)readObject('../../person.bin')
println "the name is ${result.name} and the age is ${result.age}"//the name is Android and the age is 26