在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
答案 0 :(得分:1)
Groovy对try-with-resources的替代方法是:
.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);
}