在Java中可以使用GZIPOutputStream来进行gzip压缩操作,但是无法直接保留源文件,因为压缩操作是对数据进行处理后输出到目标文件中。如果想要保留源文件,可以先将源文件内容读取到内存中,然后进行压缩操作,最后将压缩后的数据写入目标文件,并将源文件内容写回源文件。
以下是一个简单的示例代码,演示了如何进行gzip压缩并保留源文件:
import java.io.*; import java.util.zip.GZIPOutputStream; public class GzipExample { public static void main(String[] args) { String sourceFile = "source.txt"; String targetFile = "target.gz"; try { // 读取源文件内容 FileInputStream fis = new FileInputStream(sourceFile); ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = fis.read(buffer)) != -1) { baos.write(buffer, 0, bytesRead); } // 压缩源文件内容 FileOutputStream fos = new FileOutputStream(targetFile); GZIPOutputStream gos = new GZIPOutputStream(fos); gos.write(baos.toByteArray()); gos.close(); // 将源文件内容写回源文件 FileOutputStream fos2 = new FileOutputStream(sourceFile); fos2.write(baos.toByteArray()); fis.close(); baos.close(); fos.close(); fos2.close(); System.out.println("压缩并保留源文件成功"); } catch (IOException e) { e.printStackTrace(); } } }
在这个示例中,首先读取源文件内容到内存中,然后使用GZIPOutputStream对源文件内容进行压缩,将压缩后的数据写入目标文件。最后,将源文件内容写回源文件,完成压缩并保留源文件的操作。