java 关于 zip 文件 的 基本操作

这里用的是appache的包  为了防止文件中文名乱码问题

java 操作 .zip 文件  压缩文件 解压文件 删除文件夹等

package com.gaeainfo.toponymbase.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.List;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import org.apache.tools.zip.ZipOutputStream;


public class ZipUtil {
	private static MessageManager msgManager1 = new MessageManager(
			"bundle.toponymbase");
	
	private String comment = "";
	
	public void setComment(String comment) {
		this.comment = comment;
	}

	/**
	 * @param src:要压缩的目录
	 * @param dest:压缩文件存档
	 * @throws Exception
	 */
	public void zip(String src, String dest, List filter) throws Exception {
		ZipOutputStream out = new ZipOutputStream(new FileOutputStream(dest));
		File srcFile = new File(src);
		zip(out,srcFile,"",filter);
		out.close();
	}
	
	/**
	 * @param out
	 * @param srcFile
	 * @param base:根路径
	 * @param filter:过滤
	 * @throws Exception
	 */
	public void zip(ZipOutputStream out, File srcFile, String base, List filter) throws Exception {
		if(srcFile.exists()==false) {
			throw new Exception("压缩目录不存在!");
		}
		
		if(srcFile.isDirectory()) {
			File[] files = srcFile.listFiles();
			base = base.length() == 0 ? "" : base + "/";
			if (isExist(base, filter)) {
				out.putNextEntry(new ZipEntry(base));
			}
			for(int i=0; i<files.length; i++) {
				zip(out,files[i],base + files[i].getName(),filter);
			}
		} else {
			if (isExist(base, filter)) {
				base = base.length() == 0 ? srcFile.getName() : base ;
				ZipEntry zipEntry = new ZipEntry(base);
				zipEntry.setComment(comment);
				out.putNextEntry(zipEntry);
				FileInputStream in = new FileInputStream(srcFile);
				int length = 0;
				byte[] b = new byte[1024];
				while((length=in.read(b,0,1024))!=-1) {
					out.write(b,0,length);
				}
				in.close();
			}
		}
	}
	
	/**
	 * 过滤出要压缩的文件夹
	 * @param base
	 * @param list
	 * @return
	 */
	public boolean isExist(String base, List list) {
		if (list != null && !list.isEmpty()) {
			for (int i = 0; i < list.size(); i++) {
				if (base.indexOf((String) list.get(i)) >= 0) {
					return true;
				}
			}
		}
		return false;
	}
	
	/**
	 * @param srcFile:压缩文件路径
	 * @param dest:解压到的目录
	 * @param deleteFile:解压完成后是否删除文件
	 * @throws Exception
	 */
	public void unZip(String srcFile,String dest,boolean deleteFile)  throws Exception {
		File file = new File(srcFile);
		if(!file.exists()) {

		}
		ZipFile zipFile ;
		 zipFile = new ZipFile(srcFile, "GB18030"); //这一句是解决中文乱码的关键 
		Enumeration e = zipFile.getEntries();
		while(e.hasMoreElements()) {
			ZipEntry zipEntry = (ZipEntry)e.nextElement();
			if(zipEntry.isDirectory()) {
				String name = zipEntry.getName();
				name = name.substring(0,name.length()-1);
				File f = new File(dest + name);
				//System.out.println("+++"+f.getName());
				f.mkdirs();
			} else {
				File f = new File(dest + zipEntry.getName());
				//System.out.println("_______"+f.getName());
				f.getParentFile().mkdirs();
				f.createNewFile();
				InputStream is = zipFile.getInputStream(zipEntry);
				FileOutputStream fos = new FileOutputStream(f);
				int length = 0;
				byte[] b = new byte[1024];
				while((length=is.read(b, 0, 1024))!=-1) {
					fos.write(b, 0, length);
				}
				is.close();
				fos.close();
			}
		}
		
		if (zipFile != null) {
			zipFile.close();
		}
		
		if(deleteFile) {
			file.deleteOnExit();
		}
	}
	
	/**
	 * 获取Zip文件的注释信息
	 * @param srcFile
	 * @return
	 */
	public static String getZipComment(String srcFile) {
		String comment = "";
		try {
			ZipFile zipFile = new ZipFile(srcFile);
			Enumeration e = zipFile.getEntries();

			while (e.hasMoreElements()) {
				ZipEntry ze = (ZipEntry) e.nextElement();

				comment = ze.getComment();
				if (comment != null && !comment.equals("")
						&& !comment.equals("null")) {
					break;
				}
			}

			zipFile.close();
		} catch (Exception e) {
			System.out.println("获取zip文件注释信息失败:" + e.getMessage());
		}

		return comment;
	}
	
	/**
	 * desPath保存路劲
	 * srcPath原路径
	 * 将图片文件重一个文件夹 移动到一个文件夹
	 */
	public static void moveImageFile(String srcPath , String desPath)
	{
	        File f = new File(srcPath);
	        if (!f.exists()) {
	            System.out.println(srcPath + " not exists");
	            return;
	        }

	        File fa[] = f.listFiles();
	        for (int i = 0; i < fa.length; i++) {
	            File fs = fa[i];
	            if (fs.isDirectory()) {
	            	//目录
	                System.out.println(fs.getName() + " [目录]");
	            } else {
	            	//文件(图片,音频,视频)
	                System.out.println(fs.getName());
	            	String suffix = fs.getName().substring(
	            			fs.getName().lastIndexOf("."));// 文件后缀名
	            	//图片
	            	if(".jpg".equalsIgnoreCase(suffix))
	            	{
	            		String tempurl = msgManager1
								.getMessage("pic.path.temp");
	            		//tempurl :E:\\neweclipsewprkspace\\toponymcensus\\app\\temp\\image\\
	            		System.out.println("tempurl :" +tempurl);
	            		String srcImgePath = srcPath+"\\"+fs.getName();
	            		String desImagePath=srcPath+"\\"+"11"+"\\"+fs.getName();
	            		File file = new File(srcImgePath);
	            		try {
	            			if(file.exists())
							FileUtil.copyFile(srcImgePath, desImagePath);
	            			if (file.exists()) {
	            				//得到文件保存路劲
								// 生成缩略图
								String thumbnailsuffix = msgManager1
										.getMessage("preview_pic_suffix");
								String thumImagePath = desImagePath.replace(".", thumbnailsuffix+".");
								PicUtil.createPreviewImage(srcImgePath,thumImagePath);
							}
						} catch (IOException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
	            	}
	            	//视频
	            	if(".mp4".equalsIgnoreCase(suffix))
	            	{
	            		String srcVideoPath = desPath+""+fs.getName();
	            		String desVideopath = "";
	            		File file = new File(srcVideoPath);
	            		try {
	            			
	            			String tempurl = msgManager1
									.getMessage("video.path.temp");
	            			//videourl :E:\\neweclipsewprkspace\\toponymcensus\\app\\temp\\audio\\
	            			if(file.exists())
							FileUtil.copyFile(srcVideoPath, desVideopath);
	            			
						} catch (IOException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
	            		
	            	}
	            	//音频
	            	if(".3gp".equalsIgnoreCase(suffix))
	            	{
	            		String srcAudioPath = srcPath+""+fs.getName();
	            		String desAudioPath = desPath+""+fs.getName();
	            		File file = new File(srcAudioPath);
	            		try {
	            			
	            			if(file.exists())
							FileUtil.copyFile(srcAudioPath, desAudioPath);
	            			String tempurl = msgManager1
									.getMessage("audio.path.temp");//文件的保存路径
						} catch (IOException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
	            	}
	            }
	        }
	}
	/**
	 * 删除文件夹下面所有文件及目录
	 * @param delpath
	 */
	public static void deleteFiles(String delpath)
	{
			  try {  
			 
			    File file = new File(delpath);  
			    // 当且仅当此抽象路径名表示的文件存在且 是一个目录时,返回 true  
			    if (!file.isDirectory()) 
			       {  
			         file.delete();  
			       } 
			    else if (file.isDirectory()) 
			    {  
			        String[] filelist = file.list();  
			        for (int i = 0; i < filelist.length; i++) 
			        {  
			            File delfile = new File(delpath + "\\" + filelist[i]);  
			            if (!delfile.isDirectory()) 
			              {  
			                 delfile.delete();  
			                 System.out.println(delfile.getAbsolutePath() + "删除文件成功");  
			               } 
			            else if (delfile.isDirectory()) 
			              {  
			    	          deleteFiles(delpath + "\\" + filelist[i]);  
			                }  
			          }  
			            System.out.println(file.getAbsolutePath()+"删除成功");  
			            file.delete();  
			     }  
	  
			  } catch (Exception e) {  
			   System.out.println("deletefile() Exception:" + e.getMessage());  
			  }  
			 }  

	public static void main(String[] args) throws Exception {

		//文件解压
//		ZipUtil tz = new ZipUtil();
//		tz.unZip("e://fuck.zip", "e://temp//", false);
		//文件复制
		String path = "C:\\Users\\Qt\\Desktop\\测试文件";
		ZipUtil.moveImageFile(path, "");
//		String path = "C:\\Users\\Qt\\Desktop\\测试文件\\11";
//		ZipUtil.deleteFiles(path);
	}
	
	
}

 

你可能感兴趣的:(java)