groovy文件操作

目录

XML

File


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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

又逢乱世

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值