欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

将指定目录下的某些相同类型的文件打成zip包存放到指定目录下面并删除原文件

程序员文章站 2022-05-28 11:37:23
...

主要写这个类:

package com.zy.common.utils;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

/**
 * <p>Title: ZipUtil</p>
 * <p>Description: 将指定目录下的多个相同类型的文件打成zip包并删除源文件,其他文件不理</p>
 * <p>Company: </p>
 * @author ZY
 * <p> Just go on !!!</p>
 * @date 2018-3-13 下午8:32:18 
 * @version v1.0
 */
public class ZipUtil {
	
	/**
	 * <p>Description: 将目录sourcePath下面以prefix开头且以suffix结尾的文件打
	 * 	     成名为zipName的zip包放在targetPath目录下面并删除原文件</p>
	 * <p>Company: </p>
	 * @author ZY
	 * @param sourcePath 源路径
	 * @param prefix 文件名前缀
	 * @param suffix 文件名后缀
	 * @param targetPath 目标路径
	 * @param zipName 打成的zip包名
	 * @return
	 * @throws Exception
	 */
	public static boolean packFileToZip(String sourcePath,String prefix,String suffix,String targetPath,String zipName) throws Exception{
		boolean retFlag = false;
		File sourceFiles = new File(sourcePath);
		FileInputStream fis = null;
		BufferedInputStream bis = null;
		FileOutputStream fos = null;
		ZipOutputStream zos = null;
		
		
		if (!sourceFiles.exists()) {
			System.out.println("源路径:" + sourcePath + "不存在");
			throw new Exception("source path did not exist");
		}else {
			try {
				//如果目标文件夹不存在,则创建
				File targetFileDir = new File(targetPath);
				if (!targetFileDir.exists()) {
					targetFileDir.mkdir();
				}
				
				//1.定义压缩的目标zip文件
				File targetFile = new File(targetPath + zipName + ".zip");
				//2.判断此文件是否已存在
				/*if (targetFile.exists()) {
					targetFile.delete();
					System.out.println(targetPath + "目录下已经存在名为:" + zipName + ".zip的文件,先删除成功");
				}*/
				//3.列出源路径下的所有文件
				File[] files = sourceFiles.listFiles();
				//4.源路径下没有文件
				if (files == null || files.length < 1) {
					System.out.println("源路径:" + sourcePath + "下没有文件用来压缩" );
					throw new Exception("source path did not include any file");
				}else {	
					//5.源路径下有文件
					fos = new FileOutputStream(targetFile);
					zos = new ZipOutputStream(new BufferedOutputStream(fos));
					
					byte[] bs = new byte[10240];
					//6.遍历文件,选出需要的文件
					//6.1普通for循环
					/*for(int i=0;i<files.length;i++){
						if (files[i].getName().startsWith(prefix) && files[i].getName().endsWith(suffix)) {
							//7.创建zip实体,并添加进ZipOutputStream中
							ZipEntry zipEntry = new ZipEntry(files[i].getName());
							zos.putNextEntry(zipEntry);
							
							//8.读取待压缩的文件,写进压缩包里
							fis = new FileInputStream(files[i]);
							bis = new BufferedInputStream(fis,10240);
							int read = 0;
							while((read = bis.read(bs,0,10240)) != -1){
								zos.write(bs,0,read);
							}
						}
					}*/
					//6.遍历文件,选出需要的文件
					//6.1增强for循环
					for (File file : files) {
						if (file.getName().startsWith(prefix) && file.getName().endsWith(suffix)) {
							//7.创建zip实体,并添加进ZipOutputStream中
							ZipEntry zipEntry = new ZipEntry(file.getName());
							zos.putNextEntry(zipEntry);
							
							//8.读取待压缩的文件,写进压缩包里
							fis = new FileInputStream(file);
							bis = new BufferedInputStream(fis,10240);
							int read = 0;
							while((read = bis.read(bs,0,10240)) != -1){
								zos.write(bs,0,read);
							}
							//必须先关闭输入流才能删除源文件
							if (fis != null) {
								fis.close();
							}
							file.delete();
						}
					}
					retFlag = true;
				}
				
			} catch (Exception e) {
				throw e;
			}finally{
				if (bis != null) {
					bis.close();
				}
				if (zos != null) {
					zos.flush();
					zos.close();
				}
			}
			
		}
		return retFlag;
	}
}

然后写测试类:

package com.zy.test;

import org.junit.Test;

import com.zy.common.utils.ZipUtil;

public class TestZipUtil {
	
	@Test
	public void testDemo(){
		
		String sourcePath = "D://temp//";
		String prefix = "test";
		String suffix = ".pdf";
		String targetPath = "D://temp1//";
		String zipName = "test";
		boolean b;
		try {
			b = ZipUtil.packFileToZip(sourcePath, prefix, suffix, targetPath, zipName);
			System.out.println(b);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}