【问题标题】:How can I write ByteArrayOutput stream to a file in groovy?如何将 ByteArrayOutput 流写入 groovy 中的文件?
【发布时间】:2018-07-22 14:48:40
【问题描述】:

在 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

【问题讨论】:

    标签: groovy fileoutputstream try-with-resources bytearrayoutputstream


    【解决方案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
    

    希望对你有帮助。

    【讨论】:

      【解决方案2】:

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

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

      因此,您的 java 代码可能如下所示:

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

      【讨论】:

        【解决方案3】:

        另一种方式是:

        void saveToFile(ByteArrayOutputStream os, File output) {
            output.bytes = os.toByteArray()
        }
        

        虽然我猜这不是处理大文件的最佳方式,因为流在​​保存之前会先转换为字节。

        【讨论】:

          猜你喜欢
          • 2021-02-07
          • 2013-05-28
          • 2012-03-23
          • 1970-01-01
          • 1970-01-01
          • 2015-07-10
          • 2016-05-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多