將檔案或資料夾打包成壓縮檔案
阿新 • • 發佈:2018-12-04
//生成的壓縮檔案的路徑 public String compressFile(String resource,String target){ try { //要壓縮的檔案或資料夾 File res = new File(resource); //壓縮檔案生成的目錄 File tar = new File(target); //如果目標路徑不存在,則新建 if(!tar.exists()){ tar.mkdirs(); } String targetName = res.getName()+".zip";//壓縮檔名 //檔案寫入工作流 FileOutputStream outputStream = new FileOutputStream(target+File.separator+targetName); //壓縮檔案寫入工作流 ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(outputStream)); //具體的壓縮檔案實現過程 createZipFile(out, res, ""); out.close(); //返回壓縮檔案的路徑 return target+File.separator+targetName; } catch (Exception e) { e.printStackTrace(); LOG.error("壓縮檔案生成失敗!!", e); return null; } }
生成壓縮檔案的實際操作 :
//將檔案或資料夾壓縮 public void createZipFile(ZipOutputStream out,File resourceFile,String dir){ try { //如果是資料夾的話遍歷資料夾 if(resourceFile.isDirectory()){ //得到該資料夾下的所有檔案 File[] files = resourceFile.listFiles(); //將資料夾新增到下一級打包目錄 out.putNextEntry(new ZipEntry(dir+File.separator)); dir=dir.length()==0?"":dir+File.separator; //迴圈將資料夾中的檔案打包 for(int i=0;i<files.length;i++){ createZipFile(out,files[i],dir+files[i].getName()); } }else{//如果是檔案的或將檔案壓縮 //檔案讀取工作流 FileInputStream fis = new FileInputStream(resourceFile); out.putNextEntry(new ZipEntry(dir)); //寫檔案內容寫入壓縮檔案中 int j=0; byte[] buffer = new byte[1024]; while((j=fis.read(buffer))>0){ out.write(buffer, 0, j); } //關閉檔案流 fis.close(); } } catch (Exception e) { e.printStackTrace(); LOG.error("壓縮檔案失敗!!", e); } }