1. 程式人生 > >將檔案或資料夾打包成壓縮檔案

將檔案或資料夾打包成壓縮檔案

//生成的壓縮檔案的路徑
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);
		}
	}