【问题标题】:How do you append to the end of a gzipped file in Java?如何在 Java 中附加到 gzip 文件的末尾?
【发布时间】:2020-07-29 20:08:10
【问题描述】:

这是我尝试过的

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;


public class GZIPCompression {

    public static void main(String[] args) throws IOException {
        File file = new File("gziptest.zip");

        try ( OutputStream os = new GZIPOutputStream(new FileOutputStream(file, true))) {
            os.write("test".getBytes());
        }

        try ( GZIPInputStream inStream = new GZIPInputStream(new FileInputStream(file))) {
            while (inStream.available() > 0) {
                System.out.print((char) inStream.read());
            }
        }
    }
}

根据我阅读的内容,这应该将“test”附加到 gziptest.zip 的末尾,但是当我运行代码时,文件根本不会被修改。奇怪的是,如果我将FileOutputStream(file, true) 更改为FileOutputStream(file, false),文件确实会被修改,但它的原始内容会被覆盖,这当然不是我想要的。

我使用的是 JDK 14.0.1。

【问题讨论】:

    标签: java append zip gzip java-io


    【解决方案1】:

    这里有几件事。

    1. Zip 和 GZip 是不同的。如果您正在执行 gzip 测试,您的文件应该有扩展名 .gz,而不是 .zip
    2. 要正确地将“test”附加到 gzip 数据的末尾,您应该首先使用 GZIPInputStream 从文件中读取,然后将“test”附加到未压缩的文本上,然后通过 GZipOutputStream 将其发送回李>

    【讨论】:

    • 为避免整个文件都在内存中,首先重命名原始文件,然后打开它进行读取,并使用新的GZIPOutputStream 写入原始位置。请注意transferTo 的存在,用于复制旧内容。然后,追加新内容,关闭所有流并删除旧文件。
    猜你喜欢
    • 1970-01-01
    • 2021-09-07
    • 2011-08-19
    • 2017-06-15
    • 2014-05-11
    • 1970-01-01
    • 2014-05-01
    • 2011-09-06
    相关资源
    最近更新 更多