[英]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.