gpt4 book ai didi

groovy - 在 Groovy 中读取 YAML 文件

转载 作者:行者123 更新时间:2023-12-02 01:58:50 26 4
gpt4 key购买 nike

我正在尝试在我的 Groovy 项目中加载现有的 YAML 文件(使用 snakeYaml 库)。我有一个名为 YamlTape.groovy 的类,其中包含使用以下代码加载 YAML 文件的方法。

static YamlTape readFrom(Reader reader) {
try {
println "YamlTape : inside readFrom reader.size() = "+reader+" YamlTape: "+YamlTape

yaml.loadAs(reader, YamlTape)
println "YamlTape : after readfrom"
} catch (YAMLException e) {
println "YamlTape : inside catch block"
throw new TapeLoadException('Invalid tape', e)
}
}

并尝试从另一个 groovy 类调用此方法。

代码:

    YamlTape loadTape(String name) {
println "YamlTapeLoader : inside loadTape"
def file = fileFor(name)
println "YamlTapeLoader : inside loadTape filename -name: "+name
println "YamlTapeLoader : inside loadTape filename -file: "+file

file.setReadable(true);
file.setWritable(true);

if (file.isFile()) {
println "YamlTapeLoader : inside file.isFile() : "+file.isFile()
def tape = file.withReader(FILE_CHARSET) { reader ->
YamlTape.readFrom(reader)

println "YamlTapeLoader : inside readFrom : "+reader
}
println "YamlTapeLoader : tape : "+tape


tape
} else {
println "YamlTapeLoader : inside ELSE : "
new YamlTape(name: name)
}
}

但是load tape方法中的tape变量总是返回null。我添加了一些日志,发现代码能够访问 yaml 文件但无法解析 Yaml 文档并作为 Java 对象返回。

日志是:

YamlTapeLoader : inside loadTape
YamlTapeLoader : inside loadTape filename -name: kar
YamlTapeLoader : inside loadTape filename -file: /Users/Shared/AATest/Record/kar.yaml
YamlTapeLoader : inside file.isFile() : true
YamlTape : inside readFrom reader.size() = java.io.LineNumberReader@34189cab YamlTape: class co.freeside.betamax.tape.yaml.YamlTape
YamlTape : inside getYaml
YamlTape : representer = co.freeside.betamax.tape.yaml.TapeRepresenter@201a503f
YamlTape : constructor = org.yaml.snakeyaml.constructor.Constructor@16e7eec9
YamlTape : dumperOption = org.yaml.snakeyaml.DumperOptions@39d7af3
YamlTape : after readfrom
YamlTapeLoader : inside readFrom : java.io.LineNumberReader@34189cab
YamlTapeLoader : tape : null

最佳答案

withReader block 隐式返回闭包的最后一行,在您的情况下是:

        println "YamlTapeLoader : inside readFrom : "+reader

println返回null,所以把代码改成:

    def tape = file.withReader(FILE_CHARSET) { reader ->
def ret = YamlTape.readFrom(reader)
println "YamlTapeLoader : inside readFrom : "+reader
ret // Return the result of YamlTape.readFrom
}

它应该可以工作

编辑

你的readFrom方法有同样的错误...改成:

static YamlTape readFrom(Reader reader) {
try {
println "YamlTape : inside readFrom reader.size() = "+reader+" YamlTape: "+YamlTape

def ret = Yaml.loadAs(reader, YamlTape)
println "YamlTape : after readfrom"

ret // Return the YamlTape
} catch (YAMLException e) {
println "YamlTape : inside catch block"
throw new TapeLoadException('Invalid tape', e)
}
}

关于groovy - 在 Groovy 中读取 YAML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18311244/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com