java - 批量解压.gz文件

标签 java gzip compression

我有 100 个 .gz 文件需要解压缩。 我有几个问题

a) 我正在使用 http://www.roseindia.net/java/beginners/JavaUncompress.shtml 给出的代码解压缩 .gz 文件。它工作正常。 任务:- 有没有办法获取压缩文件的文件名。我知道 Java 的 Zip 类提供了要处理的输入文件的枚举。这可以给我存储在 .zip 文件中的文件名、大小等。但是,我们对 .gz 文件是否有相同的文件名,或者文件名是否与 filename.gz 相同但删除了 .gz。

b) 是否有另一种通过调用 java 代码中的实用函数来解压缩 .gz 文件的优雅方法。就像从您的 java 类调用 7-zip 应用程序一样。然后,我不必担心输入/输出流。

提前致谢。 卡 PIL

最佳答案

a) Zip 是一种存档格式,而 gzip 不是。因此,除非(例如)您的 gz 文件是压缩的 tar 文件,否则条目迭代器没有多大意义。你想要的可能是:

File outFile = new File(infile.getParent(), infile.getName().replaceAll("\\.gz$", ""));

b) 您只想解压缩文件吗?如果不是,您可以使用 GZIPInputStream 并直接读取文件,即无需中间解压缩。

不过还好。假设您真的只是 想解压缩文件。如果是这样,您可能会使用这个:

public static File unGzip(File infile, boolean deleteGzipfileOnSuccess) throws IOException {
    GZIPInputStream gin = new GZIPInputStream(new FileInputStream(infile));
    FileOutputStream fos = null;
    try {
        File outFile = new File(infile.getParent(), infile.getName().replaceAll("\\.gz$", ""));
        fos = new FileOutputStream(outFile);
        byte[] buf = new byte[100000];
        int len;
        while ((len = gin.read(buf)) > 0) {
            fos.write(buf, 0, len);
        }

        fos.close();
        if (deleteGzipfileOnSuccess) {
            infile.delete();
        }
        return outFile; 
    } finally {
        if (gin != null) {
            gin.close();    
        }
        if (fos != null) {
            fos.close();    
        }
    }       
}

关于java - 批量解压.gz文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/901003/

相关文章:

Java IDE *在* iPhone 上?

css - GZIP CSS 完全破坏页面

java - 在 Dropwizard 中启用 Gzip 压缩

jenkins - 将Jenkins中的构建结果打包到zip中

java - 当与 DataProvider 绑定(bind)时,Testng @Factory 方法失败

java - 在基本的 GUI 中,我只能看到框架

C++ ZLib GZipStream 解压缩 NULL 终止

video - 如何使用 FFprobe 查看视频切片/帧的引用列表

java - 如何在不使用模式的情况下在 DateTimeFormatterBuilder 中指定区域偏移量?

java - 从 GZIPInputStream 读取最后 *n* 行