Java實現文件壓縮與解壓縮主要依賴java.util.zip包,常見類包括:1.zipoutputstream用于創建zip文件;2.zipinputstream用于讀取zip文件;3.gzipoutputstream和gzipinputstream用于處理gzip格式;4.zipentry表示zip中的條目。壓縮文件時需使用zipoutputstream配合zipentry逐個添加文件并寫入流;解壓時通過zipinputstream遍歷條目并逐個提取內容。若需支持rar等復雜格式,可通過引入第三方庫如junrar或apache commons compress實現。
在Java中實現文件的壓縮和解壓縮,主要依賴于java.util.zip包。這個包提供了多個類來處理常見的壓縮格式,比如ZIP和GZIP。如果你需要更復雜的格式(如RAR),則需要引入第三方庫。
常見的壓縮類有哪些?
Java內置支持的壓縮類主要集中在java.util.zip包中,最常用的幾個類包括:
- ZipOutputStream:用于創建 ZIP 壓縮文件。
- ZipInputStream:用于讀取 ZIP 壓縮文件并解壓內容。
- GZIPOutputStream 和 GZIPInputStream:用于處理 GZIP 格式的壓縮和解壓。
- ZipEntry:表示 ZIP 文件中的一個條目(即一個被壓縮的文件)。
這些類配合使用可以完成基本的壓縮與解壓縮任務。
立即學習“Java免費學習筆記(深入)”;
如何壓縮一個文件?
壓縮文件最常見的做法是使用ZipOutputStream將一個或多個文件寫入 ZIP 包中。下面是一個簡單的例子:
try (FileOutputStream fos = new FileOutputStream("output.zip"); ZipOutputStream zos = new ZipOutputStream(fos)) { File fileToZip = new File("test.txt"); FileInputStream fis = new FileInputStream(fileToZip); ZipEntry zipEntry = new ZipEntry(fileToZip.getName()); zos.putNextEntry(zipEntry); byte[] buffer = new byte[1024]; int length; while ((length = fis.read(buffer)) > 0) { zos.write(buffer, 0, length); } fis.close(); } catch (IOException e) { e.printStackTrace(); }
幾點需要注意:
- 每個要壓縮的文件都需要創建一個ZipEntry對象,并通過putNextEntry()方法添加到輸出流中。
- 使用 try-with-resources 可以確保流正確關閉。
- 如果要壓縮多個文件,可以在循環中依次處理每個文件。
如何解壓縮一個ZIP文件?
解壓縮時通常使用ZipInputStream逐個讀取 ZIP 文件中的條目,并將內容寫回到磁盤。
try (FileInputStream fis = new FileInputStream("input.zip"); ZipInputStream zis = new ZipInputStream(fis)) { ZipEntry entry; while ((entry = zis.getNextEntry()) != null) { File outputFile = new File(entry.getName()); try (FileOutputStream fos = new FileOutputStream(outputFile)) { byte[] buffer = new byte[1024]; int len; while ((len = zis.read(buffer)) > 0) { fos.write(buffer, 0, len); } } zis.closeEntry(); } } catch (IOException e) { e.printStackTrace(); }
注意事項:
- 解壓前最好檢查一下目標路徑是否存在,避免覆蓋已有文件。
- 處理完每個條目后調用closeEntry()是個好習慣。
- ZIP 文件可能包含目錄結構,在解壓時要注意是否需要創建相應的目錄。
支持更多格式怎么辦?
如果你需要處理像 RAR 這樣的格式,標準 Java 庫不支持。這時候可以考慮使用一些開源庫:
- apache Commons Compress:支持多種格式,如 TAR、7z、RAR 等。
- TrueVFS 或 SevenZFile:用于處理 7-Zip 格式。
- unrar4j 或 junrar:專門用來處理 RAR 文件。
這些庫一般都有比較清晰的 API 文檔,集成起來也不復雜。例如使用 junrar 解壓 RAR 文件的大致步驟如下:
基本上就這些操作。雖然壓縮和解壓看起來有點繁瑣,但只要掌握了幾個核心類的用法,就能應對大多數常見場景了。