加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java 压缩和解压缩文件

发布时间:2020-12-15 00:15:23 所属栏目:Java 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;imp

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

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,c);
					}
					in.close();
					out.close();
				}
			}
		} catch (Exception ex) {
			System.out.println(ex.getMessage());
		} finally {
			zipFile.close();
			log.debug("解压完成!");
		}
	}

}

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读