public static void compress(String srcFilePath, String destFilePath) { File src = new File(srcFilePath); if (!src.exists()) { throw new RuntimeException(srcFilePath + "不存在"); File zipFile = new File(destFilePath); try { FileOutputStream fos = new FileOutputStream(zipFile); CheckedOutputStream cos = new CheckedOutputStream(fos, new CRC32()); ZipOutputStream zos = new ZipOutputStream(cos); String baseDir = ""; compressbyType(src, zos, baseDir); zos.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); private static void compressbyType(File src, ZipOutputStream zos, String baseDir) { if (!src.exists()) return; System.out.println("压缩" + baseDir + src.getName()); if (src.isFile()) { compressFile(src, zos, baseDir); } else if (src.isDirectory()) { compressDir(src, zos, baseDir); * 压缩文件 private static void compressFile(File file, ZipOutputStream zos, String baseDir) { if (!file.exists()) return; try { BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file)); ZipEntry entry = new ZipEntry(baseDir + file.getName()); zos.putNextEntry(entry); int count; byte[] buf = new byte[8019]; while ((count = bis.read(buf)) != -1) { zos.write(buf, 0, count); bis.close(); } catch (Exception e) { // TODO: handle exception * 压缩文件夹 private static void compressDir(File dir, ZipOutputStream zos, String baseDir) { if (!dir.exists()) return; File[] files = dir.listFiles(); if(files.length == 0){ try { zos.putNextEntry(new ZipEntry(baseDir + dir.getName() + File.separator)); } catch (IOException e) { e.printStackTrace(); for (File file : files) { compressbyType(file, zos, baseDir + dir.getName() + File.separator); * 解压文件/文件夹 public static void decompress(String srcPath, String dest) throws Exception { File file = new File(srcPath); if (!file.exists()) { throw new RuntimeException(srcPath + "所指文件不存在"); ZipFile zf = new ZipFile(file); Enumeration entries = zf.entries(); ZipEntry entry = null; while (entries.hasMoreElements()) { entry = (ZipEntry) entries.nextElement(); System.out.println("解压" + entry.getName()); if (entry.isDirectory()) { String dirPath = dest + File.separator + entry.getName(); File dir = new File(dirPath); dir.mkdirs(); } else { // 表示文件 File f = new File(dest + File.separator + entry.getName()); if (!f.exists()) { //String dirs = FileUtils.getParentPath(f); String dirs = f.getParent(); File parentDir = new File(dirs); parentDir.mkdirs(); f.createNewFile(); // 将压缩文件内容写入到这个文件中 InputStream is = zf.getInputStream(entry); FileOutputStream fos = new FileOutputStream(f); int count; byte[] buf = new byte[8192]; while ((count = is.read(buf)) != -1) { fos.write(buf, 0, count); is.close(); fos.close();
  @RequestMapping("zip")
    public void testzip() {
           ZipUtils.compress("F:\\test","F:\\test.zip");
        ///解压
        try {
            ZipUtils.decompress("F:\\test.zip","F:\\as");
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("解压文件夹失败");

Java编程思想中提到:压缩文件的时候,ZipOutputStream调用putNextEntry方法,并传入一个ZipEntry参数;解压文件的时候,new一个ZipFile对象并调用其entries()方法,对该方法返回的枚举类进行遍历并作为参数传给ZipFile的getInputStream方法。

不用引入外部包工具类ZipUtils:import java.io.*;import java.util.Enumeration;import java.util.zip.*;public class ZipUtils { /** * 压缩文件/文件夹 * */ public static void compress(String srcFilePath, String destFilePath) { File src = n import java.util.Enumeration; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; 2.当多个文件放在一个文件夹压缩的时候,解压的时候有... 主要实现解压压缩包,拿到压缩包中每个文件。 针对压缩包的操作,首先需要拿到压缩文件的流,然后利用第三方工具将流实例化,调用next方法迭代,然后分别操作压缩包中的单个文件。 三、代码实现 1.zip实现 jdk支持zip流的操作,相关依赖在java.util.zip下 // 获取本地zip包 public void unzipByPath() { try { String localPath = "D:\\文件.zip"; File file [code=java] ClassLoader classLoader=new ClassLoader() {}; Class c=classLoader.loadClass("com.test.hello"); Method[] methods = c.getMethods(); for(Method method : methods){ System.out.println(method.getName()); [/code] 上面使用了java.lang.reflect.Method的getName方法,但是我这里写的这个类并没有被初始化 Java解压zip文件(支持对文件夹解压/压缩) X.J.T: 表情包有用,感谢大佬表情包 Java解压zip文件(支持对文件夹解压/压缩) m0_60183459: