使用 java 压缩时,文件格式/扩展名未保留在 gzip 文件中

问题描述 投票:0回答:1

我尝试将文件压缩为 gzip 格式。 源文件的文件格式/扩展名不会保留在压缩的 .gz 文件中。

我使用以下java代码来gzip文件。

我能够在

.gz
文件中获取文件格式,如果
toFile = test.csv.gz

但文件格式不可用,如果

toFile = test.gz

我担心的是我不想在

gzip
文件的名称中使用源文件格式。

代码:

public void gzipFile(String fromFile, String toFile) throws IOException {



    GZIPOutputStream out = null;
    BufferedInputStream in = null;


    try {
        // Open the input file
        in = new BufferedInputStream(new FileInputStream(fromFile));

        // Create the GZIP output stream
        out = new GZIPOutputStream(new BufferedOutputStream(new FileOutputStream(toFile)));

        // Transfer bytes from the input file to the GZIP output stream
        byte[] buffer = new byte[1024];
        int len;
        while ((len = in.read(buffer)) != -1) {
            out.write(buffer, 0, len);
        }
        //Complete the entry
        out.flush();
        in.close();


        File newFile = new File(toFile.replace(".log", ""));
        System.out.println(newFile);
        File file = new File(toFile);
        file.renameTo(newFile);
    } catch (IOException e) {
        // log and return false
        e.printStackTrace();
    } finally {
        try {
            if (in != null) {
                in.close();
            }
            if (out != null) {
                // Complete the GZIP file
                out.finish();
                out.close();
            }
        } catch (IOException ignore) {
        }
    }

}
java compression gzip
1个回答
0
投票

首先,在尝试重命名 toFile 之前,您没有 out.close() (如果没有 .log,则可能是无操作)。

其次,您可能指的是扩展名(如 .csv),而不是格式。

第三,好吧,当然,你想要你想要的(没有扩展名)。但你没有努力尝试在任何地方存储原始名称。

如果你这样做了,你就会发现 jdk 中的 GZIPOutputStream 并不支持它。您需要 apache common-compress 在 GzipCompressorOutputStream 的 GzipParameters 中设置文件名。

您应该知道,虽然如果您与也可以访问此 gzip 头文件名(也许也可以使用 common-compress)的阅读代码交谈,这是公平的,但不要指望太多通用读者会关注此文件名。我知道 7zip 知道这一点。其他的我就不知道了。

© www.soinside.com 2019 - 2024. All rights reserved.