如何将ByteArrayOutput流写入groovy中的文件?

时间:2018-02-12 12:20:09

标签: groovy fileoutputstream try-with-resources bytearrayoutputstream

在Java中,我可以轻松使用以下代码,将ByteArrayOutputStream写入文件。但是,try-with-resources在Groovy中不起作用:(

ByteArrayOutputStream byteArrayOutputStream = getByteStreamMethod();
try(OutputStream outputStream = new FileOutputStream("thefilename")) {
    byteArrayOutputStream.writeTo(outputStream);
}

我一直在尝试关注像http://mrhaki.blogspot.co.uk/2009/11/groovy-goodness-readers-and-writers.html这样的链接 和 在这里回答IntelliJ error - java: try-with-resources is not supported in -source 1.6 error. Even though in project settings 1.7 JDK is selected

但我无法想到Groovy语法,将上面的java代码块写成。 你能不能在这里做一些关于如何在Groovy中编写上述java代码块的文章?

PS:我使用的是Groovy v2.4.12

2 个答案:

答案 0 :(得分:1)

Groovy对的替代方法是:

  • .withClosable(Closure cl)
  • .withOutputStream(Closure cl)

在您的情况下,以下示例会将ByteArrayOutputStream的数据写入给定的File

final ByteArrayOutputStream os = new ByteArrayOutputStream()
os.withCloseable {
    it << "Lorem ipsum dolor sit amet".bytes
}

new File("/tmp/lorem.txt").withOutputStream { stream ->
    os.writeTo(stream)
}

println new File("/tmp/lorem.txt").text

在最后一行,我们正在打印/tmp/lorem.txt文件的当前内容:

Lorem ipsum dolor sit amet

希望它有所帮助。

答案 1 :(得分:0)

在groovy中输入/输出流有一种扩展方法withStream(Closure)

将此Stream传递给闭包,确保在闭包返回后关闭流,而不管错误。

所以,你的java代码看起来像这样:

ByteArrayOutputStream byteArrayOutputStream = getByteStreamMethod();
new FileOutputStream("thefilename").withStream{outputStream->
    byteArrayOutputStream.writeTo(outputStream);
}