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