繁体   English   中英

用 Java 提取 GZ 文件

[英]Extract GZ file with Java

我正在尝试从GZ文件中提取CSV文件。

到目前为止,我已经尝试了以下方法来进行此操作:

Archiver archiver = ArchiverFactory.createArchiver(null, CompressionType.GZIP);
archiver.extract(archiveFile, destFile);

或者

GzipCompressorInputStream archive = new GzipCompressorInputStream(new BufferedInputStream(new FileInputStream(archiveFile)));
OutputStream out = new FileOutputStream(destFile);
IOUtils.copy(archive, out);
out.close();
archive.close();

或者

GZIPInputStream archive= new GZIPInputStream(new FileInputStream(archiveFile));
OutputStream out = new FileOutputStream(destFile);
IOUtils.copy(archive, out);
out.close();
archive.close();

我还尝试了Snappy ,它是 github 上的(非)压缩库。

在每种情况下,我都显示以下错误

java.io.IOException: Gzip-compressed data is corrupt

我已经使用以下控制台命令检查了GZ文件的有效性,该命令表示一切正常。

gzip -v -t MyFileToUncompress.csv.gz
MyFileToUncompress.csv.gz: OK

GZ文件由控制台命令或 Java 本身或在 Windows 上压缩。 到目前为止的结果相同。

是我做错了什么还是我的 Java 有问题(JDK 1.7 或 1.8 产生相同的异常)?

这是我用于 gunzip 的代码,尽管它看起来不会产生不同的结果,因为它与您的第三个示例基本相同:

try(final OutputStream out = Files.newOutputStream(fout);
    final InputStream in   = new GZIPInputStream(Files.newInputStream(fin))) {
    in.transferTo(out);
}

但是,值得检查您的结果是否使用最新的 JDK 发生变化,并检查gzip -d MyFileToUncompress.csv.gz生成了预期的文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM