将文件或文件夹打包成压缩文件

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chenshibailian/article/details/84784114
//生成的压缩文件的路径
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);
		}
	}

猜你喜欢

转载自blog.csdn.net/chenshibailian/article/details/84784114