java 压缩和解压缩文件详解编程语言

import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.util.Enumeration; 
import org.apache.tools.zip.ZipEntry; 
import org.apache.tools.zip.ZipFile; 
import org.apache.tools.zip.ZipOutputStream; 
import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
 
/** 
 * 压缩,解压,删除,拷贝操作。 
 *  
 * 注意:此类中用到的压缩类ZipEntry等都来自于org.apache.tools包而非java.util。此包在ant.jar中有。 
 *  
 * * @author Tony 
 */ 
public class FileUtil { 
	protected static Logger log = LoggerFactory.getLogger(FileUtil.class); 
 
	/** 
	 *  
	 * 压缩文件 
	 *  
	 * @param inputFileName 
	 *            要压缩的文件或文件夹路径,例如:c://a.txt,c://a/ 
	 *  
	 * @param outputFileName 
	 *            输出zip文件的路径,例如:c://a.zip 
	 *  
	 */ 
	public static void zip(String inputFileName, String outputFileName) 
			throws Exception { 
		ZipOutputStream out = new ZipOutputStream(new FileOutputStream( 
				outputFileName)); 
		zip(out, new File(inputFileName), ""); 
		log.debug("压缩完成!"); 
		out.closeEntry(); 
		out.close(); 
	} 
 
	/** 
	 *  
	 * 压缩文件 
	 *  
	 * @param out 
	 *            org.apache.tools.zip.ZipOutputStream 
	 *  
	 * @param file 
	 *            待压缩的文件 
	 *  
	 * @param base 
	 *            压缩的根目录 
	 *  
	 */ 
	private static void zip(ZipOutputStream out, File file, String base) 
			throws Exception { 
		if (file.isDirectory()) { 
			File[] fl = file.listFiles(); 
			base = base.length() == 0 ? "" : base + File.separator; 
			for (int i = 0; i < fl.length; i++) { 
				zip(out, fl[i], base + fl[i].getName()); 
			} 
		} else { 
			out.putNextEntry(new ZipEntry(base)); 
			log.debug("添加压缩文件:" + base); 
			FileInputStream in = new FileInputStream(file); 
			int b; 
			while ((b = in.read()) != -1) { 
				out.write(b); 
			} 
			in.close(); 
		} 
	} 
 
	/** 
	 *  
	 * 解压zip文件 
	 *  
	 * @param zipFileName 
	 *            待解压的zip文件路径,例如:c://a.zip 
	 *  
	 * @param outputDirectory 
	 *            解压目标文件夹,例如:c://a/ 
	 *  
	 */ 
	public static void unZip(String zipFileName, String outputDirectory) 
			throws Exception { 
		ZipFile zipFile = new ZipFile(zipFileName); 
		try { 
			Enumeration<?> e = zipFile.getEntries(); 
			ZipEntry zipEntry = null; 
			createDirectory(outputDirectory, ""); 
			while (e.hasMoreElements()) { 
				zipEntry = (ZipEntry) e.nextElement(); 
				log.debug("解压:" + zipEntry.getName()); 
				if (zipEntry.isDirectory()) { 
					String name = zipEntry.getName(); 
					name = name.substring(0, name.length() - 1); 
					File f = new File(outputDirectory + File.separator + name); 
					f.mkdir(); 
					log.debug("创建目录:" + outputDirectory + File.separator + name); 
				} else { 
					String fileName = zipEntry.getName(); 
					fileName = fileName.replace('//', '/'); 
					if (fileName.indexOf("/") != -1) { 
						createDirectory(outputDirectory, fileName.substring(0, 
								fileName.lastIndexOf("/"))); 
						fileName = fileName.substring( 
								fileName.lastIndexOf("/") + 1, 
								fileName.length()); 
					} 
					File f = new File(outputDirectory + File.separator 
							+ zipEntry.getName()); 
					f.createNewFile(); 
					InputStream in = zipFile.getInputStream(zipEntry); 
					FileOutputStream out = new FileOutputStream(f); 
					byte[] by = new byte[1024]; 
					int c; 
					while ((c = in.read(by)) != -1) { 
						out.write(by, 0, c); 
					} 
					in.close(); 
					out.close(); 
				} 
			} 
		} catch (Exception ex) { 
			System.out.println(ex.getMessage()); 
		} finally { 
			zipFile.close(); 
			log.debug("解压完成!"); 
		} 
	} 
 
} 

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/10972.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论