我有一个zip文件,我想将其转换为gzip并将其写回到文件系统中。我该怎么办?
我已经有以下代码将文件压缩为gzip:
private static void compressGzipFile(String file, String gzipFile) {
try {
FileInputStream fis = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream(gzipFile);
GZIPOutputStream gzipOS = new GZIPOutputStream(fos);
byte[] buffer = new byte[1024];
int len;
while ((len=fis.read(buffer)) != -1) {
gzipOS.write(buffer, 0, len);
}
// Close resources
gzipOS.close();
fos.close();
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
现在,我需要代码将zip文件转换为gzip文件。
答案 0 :(得分:0)
为什么不只是将ZipInputStream
直接传送到GZIPOutputStream
中呢?
private static void convertZipToGzip(String zipFile, String gzipFile) {
try (ZipInputStream zipIS = new ZipInputStream(file),
GZIPOutputStream gzipOS = new GZIPOutputStream(gzipFile)) {
zipIS.transferTo(gzipOS);
} catch (IOException e) {
e.printStackTrace();
}
}
该解决方案利用了Java 9极其有用的InputStream#transferTo(OutputStream)
的优势。如果您尚未使用Java 9,则需要手动将字节从一个流复制到另一流,或使用Apache Commons IOUtils的IOUtils.copy(InputStream, OutputStream)
。