Java是一種跨平台的程式設計語言,可以用于許多應用程式的開發,在進行檔案處理時也有多種方法可以用來實作。其中包括檔案壓縮和解壓縮,這在許多場合下都是非常有用的。
檔案壓縮是指将一個大檔案或目錄壓縮為單個壓縮檔案。這樣的好處是占用更少的磁盤空間,并且使檔案傳輸變得更加友善。Java中提供了ZipOutputStream和GZIPOutputStream類來完成檔案壓縮的任務。
ZipOutputStream類可以用于建立ZIP格式的壓縮檔案。下面是一段Java代碼,示範如何使用ZipOutputStream類來建立一個名為“compressed.zip”壓縮檔案,并向其中添加兩個檔案:
import java.io.*;
import java.util.zip.*;
public class ZipExample {
public static void main(String[] args) {
byte[] buffer = new byte[1024];
try {
FileOutputStream fos = new FileOutputStream("compressed.zip");
ZipOutputStream zos = new ZipOutputStream(fos);
String file1 = "file1.txt";
String file2 = "file2.txt";
String[] files = {file1, file2};
for (int i=0; i<files.length; i++) {
FileInputStream fis = new FileInputStream(files[i]);
zos.putNextEntry(new ZipEntry(files[i]));
int length;
while ((length = fis.read(buffer)) > 0) {
zos.write(buffer, 0, length);
}
zos.closeEntry();
fis.close();
}
zos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
上述代碼中,我們首先定義一個名為“compressed.zip”的輸出檔案流,并使用ZipOutputStream建立一個相應的輸出流。接着,我們将需要壓縮的兩個檔案存儲到一維數組變量files中,每次循環對其中一個檔案進行處理,在ZipOutputStream建立的壓縮檔案compressed.zip中添加這個檔案,并關閉壓縮項。最後,我們關閉整個壓縮過程。
GZIPOutputStream類可以用于建立GZIP格式的壓縮檔案。下面是一段Java代碼,展示如何使用GZIPOutputStream類來建立一個名為“compressed.gz”壓縮檔案:
import java.io.*;
import java.util.zip.*;
public class GZIPExample {
public static void main(String[] args) {
byte[] buffer = new byte[1024];
try {
FileInputStream fis = new FileInputStream("input.txt");
FileOutputStream fos = new FileOutputStream("compressed.gz");
GZIPOutputStream gzipOS = new GZIPOutputStream(fos);
int length;
while ((length = fis.read(buffer)) > 0) {
gzipOS.write(buffer, 0, length);
}
fis.close();
gzipOS.finish();
gzipOS.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
上述代碼中,我們首先定義一個名為“input.txt”的輸入檔案流,并定義一個名為“compressed.gz”的輸出檔案流。然後,我們使用GZIPOutputStream建立一個相應的壓縮輸出流。在while循環中,我們将從輸入檔案input.txt讀取資料,并将其寫入壓縮輸出流compressed.gz中。最後,我們關閉整個壓縮過程。
檔案解壓是指将一個已經壓縮的檔案恢複到原始狀态。Java提供了ZipInputStream和GZIPInputStream類來完成檔案解壓縮的任務。
ZipInputStream類可以用于解壓縮ZIP格式的檔案,下面是一個示範程式:
import java.io.*;
import java.util.zip.*;
public class UnZipExample {
public static void main(String[] args) {
byte[] buffer = new byte[1024];
try {
ZipInputStream zis = new ZipInputStream(new FileInputStream("compressed.zip"));
ZipEntry zipEntry = zis.getNextEntry();
while (zipEntry != null) {
String fileName = zipEntry.getName();
FileOutputStream fos = new FileOutputStream(fileName);
int length;
while ((length = zis.read(buffer)) > 0) {
fos.write(buffer, 0, length);
}
fos.close();
zipEntry = zis.getNextEntry();
}
zis.closeEntry();
zis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
上述代碼中,我們首先定義一個名為“compressed.zip”的ZipInputStream輸入流,并擷取該檔案中的第一個條目(即壓縮檔案中的第一個檔案)。接着,在while循環中,我們向檔案系統寫入讀取自該輸入流的檔案,如果存在更多的條目,則重複進行此操作。最後,我們關閉整個解壓縮過程。
GZIPInputStream類可以用于解壓縮GZIP格式的檔案,下面是一個示範程式:
import java.io.*;
import java.util.zip.*;
public class UnGZIPExample {
public static void main(String[] args) {
byte[] buffer = new byte[1024];
try {
GZIPInputStream gzipIS = new GZIPInputStream(new FileInputStream("compressed.gz"));
String fileName = "output.txt";
FileOutputStream fos = new FileOutputStream(fileName);
int length;
while ((length = gzipIS.read(buffer)) > 0) {
fos.write(buffer, 0, length);
}
gzipIS.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
上述代碼中,我們首先定義一個名為“compressed.gz”的GZIPInputStream輸入流,并将其讀取到一個名為“output.txt”的輸出流中。在while循環中,我們将讀取自GZIP輸入流gzipIS的資料寫入名為“output.txt”的輸出流中。最後,我們關閉整個解壓縮過程。