【问题标题】:java: save string as gzip filejava:将字符串保存为 gzip 文件
【发布时间】:2011-05-13 16:05:37
【问题描述】:

我是java初学者,我需要this之类的东西:

String2GzipFile (String file_content, String file_name)
String2GzipFile("Lorem ipsum dolor sit amet, consectetur adipiscing elit.", "lorem.txt.gz")

我不知道该怎么做。

【问题讨论】:

    标签: java string gzip compression


    【解决方案1】:

    这里有两个正交的概念:

    • 将文本转换为二进制,通常通过OutputStreamWriter
    • 压缩二进制数据,例如使用GZIPOutputStream

    所以最后你会想要:

    • 创建一个OutputStream,它将写入您想要结果的任何位置(例如,通过ByteArrayOutputStream 写入文件或内存中)
    • OutputStream 包装在GZIPOutputStream
    • 使用适当的字符集(例如 UTF-8)将 GZIPOutputStream 包装在 OutputStreamWriter
    • 将文本写入OutputStreamWriter
    • 关闭 writer,这将刷新并关闭其他所有内容。

    例如:

    FileOutputStream output = new FileOutputStream(fileName);
    try {
      Writer writer = new OutputStreamWriter(new GZIPOutputStream(output), "UTF-8");
      try {
        writer.write(text);
      } finally {
        writer.close();
      }
     } finally {
       output.close();
     }
    

    请注意,即使我们无法创建写入器,我也会关闭output,但如果一切成功,我们仍然需要关闭writer,以便刷新所有内容并完成写入数据。

    【讨论】:

    • 我尝试使用 ByteArrayOutputStream,但您的示例运行良好。谢谢
    • @user752679:我最初使用 ByteArrayOutputStream 编写了一个示例,但正如您的问题所说,您想将其写入文件...
    • 注意:不要忘记关闭streamWriter,否则你会在尝试打开*.gzip时得到unexpected EOF - stackoverflow.com/a/12100352/432903
    【解决方案2】:

    看看GZIPOutputStream - 您应该能够以与任何其他输出流完全相同的方式使用它来写入文件 - 它只会自动以 gzip 压缩格式写入。

    【讨论】:

      【解决方案3】:

      与 Jon 相同的解决方案,只是使用资源尝试

      try (FileOutputStream output = new FileOutputStream("filename.gz");
           Writer writer = new OutputStreamWriter(new GZIPOutputStream(output), "UTF-8")) {
          
          writer.write("someText");
      }
      

      【讨论】:

      • 另外,最好使用StandardCharsets.UTF_8 而不是"UTF-8"
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-04
      • 2020-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-03
      相关资源
      最近更新 更多