Java實現創建Zip壓縮包並寫入文件
前言
工作中需要把一些數據放到一個zip的壓縮包中,可以使用 ZipOutputStream。ZipOutputStream可以將內容直接寫入到zip包中。一般創建ZipOutputStream通常是先封裝一個FileOutputStream,然後在每寫入一個文件之前,需要先調用一次putNextEntry,然後使用write寫入byte[]類型的數據,當寫入完畢的時候使用colseEntry來結束這個文件的打包。當然也可以通過ZipOutputStream直接把數據寫入壓縮包內,在壓縮包內構建數據。
使用
public static void filetest() throws IOException { String txtPath = "D:\\fileTest\\image\\2.txt"; String zipPath = "D:\\fileTest\\image\\2.zip"; //壓縮包路徑 String str = "測試test123abc"; //需要寫入的數據 //創建壓縮包 ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(zipPath)); //封裝一個文件 FileWriter fileWriter = null; try { fileWriter = new FileWriter(txtPath); fileWriter.write(str); fileWriter.flush(); fileWriter.close(); } catch (IOException e) { log.error("fileWriter", e); } //對上面封裝好的文件構建一個FileInputStream FileInputStream fis = new FileInputStream(txtPath); //壓縮包裡創建一個空文件 zipOutputStream.putNextEntry(new ZipEntry("Request.json")); //寫入壓縮文件 int len; byte[] buffer = new byte[1024]; //字節數組大小可調節 //讀取fis字節流,轉移到buffer字節數組中去,讀取後fis為空 while ((len = fis.read(buffer)) > 0) { zipOutputStream.write(buffer, 0, len); } byte[] b = new byte[1024]; int a = fis.read(b); //關閉壓縮包打包 zipOutputStream.closeEntry(); fis.close(); zipOutputStream.flush(); zipOutputStream.close(); }
運行之後,將會創建如下文件:
壓縮包內會產生一個叫Request.json文件,如圖:
內容與2.txt裡的內容一致,為“測試test123abc”。
上述方法是:先創建2.txt,再讀取2.txt的內容,導入到壓縮包內形成文件。相同的邏輯,我們可以讀取任意其他文件,然後把他們放入到壓縮包內。
直接將內容導入到壓縮包內
當然我們也可以直接將數據導入到壓縮包內。實現如下:
public static void filetest() throws IOException { String zipPath = "D:\\fileTest\\image\\3.zip"; //壓縮包路徑 String str1 = "測試test123abc"; //需要寫入的數據 String str2 = "測試2"; String Name1 = StringUtils.join("文件.json"); //壓縮包裡的文件 String Name2 = StringUtils.join("file/文件1.json"); //在壓縮包裡創建file目錄下的文件 //創建壓縮包 ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(zipPath)); //創建壓縮包裡的文件 zipOutputStream.putNextEntry(new ZipEntry(Name1)); byte[] bytes1 = str1.getBytes(StandardCharsets.UTF_8); zipOutputStream.write(bytes1, 0, bytes1.length); //將數據寫入到壓縮包裡的文件裡面 zipOutputStream.closeEntry(); zipOutputStream.putNextEntry(new ZipEntry(Name2)); byte[] bytes2 = str2.getBytes(StandardCharsets.UTF_8); zipOutputStream.write(bytes2, 0, bytes2.length); zipOutputStream.closeEntry(); zipOutputStream.flush(); zipOutputStream.close(); }
上述是直接將String類型數據轉換成byte數組,導入到壓縮包內,形成兩個文件:
file文件夾裡面是文件1.json,裡面的內容是“測試2”,文件.json的內容則是“測試test123abc”。
以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。
推薦閱讀:
- Java中zip的壓縮和解壓縮的實現代碼
- Java中I/O輸入輸出的深入講解
- Java實現把文件壓縮成zip文件的示例代碼
- Java實現文件壓縮為zip和解壓zip壓縮包
- 手把手教你用SpringBoot將文件打包成zip存放或導出