目录
XML
xml 操作
import groovy.xml.XmlSlurper
final String xml = '''
<DataflowCleanseRule formatVersion="17.10" language="java">
<RuleID>B67520AE-FB90-4D51-AEBE-62B82F21B48C</RuleID>
<FunctionIdentifier>
<ClassName>
<Test>A</Test>
<Pattern>a1</Pattern>
</ClassName>
<ClassName>
<Test>B</Test>
<Pattern>b2</Pattern>
</ClassName>
<ApplyTo implements="true" overrides="true" extends="true"/>
</FunctionIdentifier>
<OutArguments>return</OutArguments>
</DataflowCleanseRule>
'''
def xmlSlurper = new XmlSlurper()
def xmlText = xmlSlurper.parseText(xml)
// text:获取标签体文本
println xmlText.RuleID.text()
// @属性名:获取属性值
println xmlText.@formatVersion
// 通过下标,指定名称相同节点的位置
println xmlText.FunctionIdentifier.ClassName[1].Pattern.text()
// 深度遍历xml获取指定数据,depthFirst可以替换为 '**' 示例xmlText.'**'.findAll
println xmlText.depthFirst().findAll {className ->
className.Test.text() == 'A'
}.collect { node ->
return node.Test.text()
}
// 广度遍历xml获取指定的数据。使用children() '*'号是广度遍历,'**'号是深度遍历
println xmlText.FunctionIdentifier.'*'.findAll{ node->
node.name() == 'ClassName'
}.collect { node->
return node.Pattern.text()
}
生成 xml 文件,写死的方式
/**
* 生成这样的xml格式数据
<langs type='current' count='3' mainstream='true'>
<language flavor='static' version='1.5'>Java</language>
<language flavor='dynamic' version='1.6.0'>Groovy</language>
<language flavor='dynamic' version='1.9'>JavaScript</language>
</langs>
*/
def sw = new StringWriter()
//用来生成xml数据的核心类
def xmlBuilder = new MarkupBuilder(sw)
//根结点langs创建成功
xmlBuilder.langs(type: 'current', count: '3',
mainstream: 'true') {
language(flavor: 'static', version: '1.5') {
age('16')
}
language(flavor: 'dynamic', version: '1.6') {
age('10')
}
language(flavor: 'dynamic', version: '1.9', 'JavaScript')
}
println sw
生成 xml 文件,动态的方式
import groovy.xml.MarkupBuilder
def sw = new StringWriter()
//用来生成xml数据的核心类
def xmlBuilder = new MarkupBuilder(sw)
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, 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.5', value: 'Java'),
new Language(flavor: 'dynamic', version: '1.3', value: 'Groovy'),
new Language(flavor: 'dynamic', version: '1.6', value: 'JavaScript')
]
}
//对应xml中的languang结点
class Language {
String flavor
String version
String value
}
File
// 创建文件对象
def file = new File('./data.txt')
// 循环遍历文件中的每一行
file.eachLine {line ->
println line
}
// 获取文件中的所有内容,返回string类型
println file.getText()
// 获取文件中的所有内容,返回arraylist类型
println file.readLines()
// 读取文件部分内容,闭包的方式不需要处理流的关闭
def reader = file.withReader {reader ->
char[] buffer = new char[1024]
reader.read(buffer)
return buffer
}
println reader
// copy 文件
def copy(String sourcePath, String targetPath) {
// 创建目标文件
def targetFile = new File(targetPath)
if (!targetFile.exists()) {
targetFile.createNewFile()
}
// 开始 copy
new File(sourcePath).withReader {reader ->
def lines = reader.readLines()
targetFile.withWriter {writer ->
lines.each {line ->
writer.append(line).append("\r\n")
}
}
}
return true
}
println copy('./data.txt', './dataCopy.txt')
对象到文件的操作
// 把对象写入到文件中
def saveObject(Object object, String path) {
//首先创建目标文件
def desFile = new File(path)
if (!desFile.exists()) {
desFile.createNewFile()
}
desFile.withObjectOutputStream { out ->
out.writeObject(object)
}
return true
}
// 从文件中读取对象
def readObject(String path) {
def obj = null
def file = new File(path)
if (file == null || !file.exists()) return null
//从文件中读取对象
file.withObjectInputStream { input ->
obj = input.readObject()
}
return obj
}
def userObj = [name:'张三', age:18]
// 存
saveObject(userObj, './txtObj.bin')
// 取
def obj = readObject('./txtObj.txt')
println obj