java - 用Java提取GZ文件
问题描述
我正在尝试从文件中提取CSV
文件GZ
。
到目前为止,我已经尝试了以下方法来进行此操作:
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
生成了预期的文件。
推荐阅读
- java - 按谓词拆分 Java 列表并为每个子列表映射不同的函数
- onclick - alpine.js,如何使元素在 self @click 上消失?
- python - How to load cudf in colab?
- javascript - 如何在 vue.js 中迭代数据
- sharepoint - 有没有办法让 SPFx 自定义 webpart 占据整个空间?
- javascript - 如何检查 MongoDB 字段的值是否在字符串中?
- tensorflow - 用于部署的 CNN 模型:如何优化
- c# - 有没有办法使用不同名称的控制器和视图但仍然能够显示错误属性消息?
- javascript - 如何交叉过滤 2 dc.js SeriesChart?
- scala - Akka Stream - 带分区的并行处理