在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對源文件內容進行壓縮,將壓縮后的數據寫入目標文件。最后,將源文件內容寫回源文件,完成壓縮并保留源文件的操作。