在Java中可以使用GZIPOutputStream來(lái)進(jìn)行g(shù)zip壓縮操作,但是無(wú)法直接保留源文件,因?yàn)閴嚎s操作是對(duì)數(shù)據(jù)進(jìn)行處理后輸出到目標(biāo)文件中。如果想要保留源文件,可以先將源文件內(nèi)容讀取到內(nèi)存中,然后進(jìn)行壓縮操作,最后將壓縮后的數(shù)據(jù)寫(xiě)入目標(biāo)文件,并將源文件內(nèi)容寫(xiě)回源文件。
以下是一個(gè)簡(jiǎn)單的示例代碼,演示了如何進(jìn)行g(shù)zip壓縮并保留源文件:
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 {
// 讀取源文件內(nèi)容
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);
}
// 壓縮源文件內(nèi)容
FileOutputStream fos = new FileOutputStream(targetFile);
GZIPOutputStream gos = new GZIPOutputStream(fos);
gos.write(baos.toByteArray());
gos.close();
// 將源文件內(nèi)容寫(xiě)回源文件
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();
}
}
}
在這個(gè)示例中,首先讀取源文件內(nèi)容到內(nèi)存中,然后使用GZIPOutputStream對(duì)源文件內(nèi)容進(jìn)行壓縮,將壓縮后的數(shù)據(jù)寫(xiě)入目標(biāo)文件。最后,將源文件內(nèi)容寫(xiě)回源文件,完成壓縮并保留源文件的操作。