📜  如何读取 .gz 文件 (1)

📅  最后修改于: 2023-12-03 15:38:55.357000             🧑  作者: Mango

如何读取 .gz 文件

在开发过程中,我们经常会遇到需要读取 .gz 格式压缩文件的情况,本文将介绍如何使用 Python 和 Java 读取 .gz 文件。

Python 读取 .gz 文件

Python 通过 gzip 模块提供了读取 .gz 文件的支持。

读取压缩文件内容

要读取压缩文件的内容,可以通过 gzip.open 打开文件。下面是一个示例:

import gzip

with gzip.open('example.gz', 'rt', encoding='utf-8') as f:
    text = f.read()
    print(text)

在上面的代码中,'example.gz' 是压缩文件的文件名,'rt' 制定了以文本模式读取文件,encoding='utf-8' 制定了使用 UTF-8 编码解压缩后的文本。

逐行读取文件内容

如果要逐行读取文件内容,可以使用 gzip.open 打开文件,并使用 readline 方法读取每一行。下面是示例:

import gzip

with gzip.open('example.gz', 'rt', encoding='utf-8') as f:
    for line in f:
        print(line.strip())

在上面的代码中,strip 方法用来去掉每行末尾的换行符。

Java 读取 .gz 文件

Java 通过 java.util.zip 包提供了读取 .gz 文件的支持。

读取压缩文件内容

要读取压缩文件的内容,可以通过 GZIPInputStream 类的构造函数创建输入流,然后将输入流封装成 BufferedReader 类来逐行读取文本。下面是一个示例:

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.zip.GZIPInputStream;

public class ReadGzipFile {
    public static void main(String[] args) {
        try (GZIPInputStream input = new GZIPInputStream(new FileInputStream("example.gz"));
             BufferedReader reader = new BufferedReader(new InputStreamReader(input))) {
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
读取压缩二进制文件

如果要读取压缩的二进制文件,可以通过 GZIPInputStream 类的构造函数创建输入流,然后从输入流中读取数据。下面是示例:

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.GZIPInputStream;

public class ReadBinaryGzipFile {
    public static void main(String[] args) {
        byte[] buffer = new byte[1024];

        try (GZIPInputStream input = new GZIPInputStream(new FileInputStream("example.gz"));
             FileOutputStream output = new FileOutputStream("example")) {
            int len;
            while ((len = input.read(buffer)) > 0) {
                output.write(buffer, 0, len);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在上面的代码中,buffer 数组用来缓冲读取的数据。