我尝试将文件压缩为 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) {
}
}
}
首先,在尝试重命名 toFile 之前,您没有 out.close() (如果没有 .log,则可能是无操作)。
其次,您可能指的是扩展名(如 .csv),而不是格式。
第三,好吧,当然,你想要你想要的(没有扩展名)。但你没有努力尝试在任何地方存储原始名称。
如果你这样做了,你就会发现 jdk 中的 GZIPOutputStream 并不支持它。您需要 apache common-compress 在 GzipCompressorOutputStream 的 GzipParameters 中设置文件名。
您应该知道,虽然如果您与也可以访问此 gzip 头文件名(也许也可以使用 common-compress)的阅读代码交谈,这是公平的,但不要指望太多通用读者会关注此文件名。我知道 7zip 知道这一点。其他的我就不知道了。