精华内容
下载资源
问答
  • java使用ant实现Zip文件压缩、解压缩Zip文件。 单个文件压缩成Zip文件,多个文件压缩成Zip文件。 使用ant实现大文件压缩。

    java使用ant实现Zip文件压缩、解压缩Zip文件。

    单个文件压缩成Zip文件,多个文件压缩成Zip文件。

    可以压缩大文件。

    需要使用到ant.jar文件,放到lib目录下。

    ant.jar下载:http://download.csdn.net/detail/xinxin19881112/8906157


    Zip.java

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.OutputStream;
    import java.util.zip.ZipOutputStream;
    import org.apache.tools.zip.ZipEntry;
    
    /**
     * ZIP操作工具类
     */
    public class Zip {
    	
    	/**
    	 * 压缩文件列表到某ZIP文件
    	 * @param zipFilename 要压缩到的ZIP文件
    	 * @param paths 文件列表,多参数
    	 * @throws Exception
    	 */
    	public static void compress(String zipFilename, String... paths)
    			throws Exception {
    		compress(new FileOutputStream(zipFilename), paths);
    	}
    
    	/**
    	 * 压缩文件列表到输出流
    	 * @param os 要压缩到的流
    	 * @param paths 文件列表,多参数
    	 * @throws Exception
    	 */
    	public static void compress(OutputStream os, String... paths)
    			throws Exception {
    		ZipOutputStream zos = new ZipOutputStream(os);
    		for (String path : paths) {
    			if (path.equals(""))
    				continue;
    			java.io.File file = new java.io.File(path);
    			if (file.exists()) {
    				if (file.isDirectory()) {
    					zipDirectory(zos, file.getPath(), file.getName()
    							+ File.separator);
    				} else {
    					zipFile(zos, file.getPath(), "");
    				}
    			}
    		}
    		zos.close();
    	}
    	
    	private static void zipDirectory(ZipOutputStream zos, String dirName,
    			String basePath) throws Exception {
    		File dir = new File(dirName);
    		if (dir.exists()) {
    			File files[] = dir.listFiles();
    			if (files.length > 0) {
    				for (File file : files) {
    					if (file.isDirectory()) {
    						zipDirectory(zos, file.getPath(), basePath
    								+ file.getName().substring(
    										file.getName().lastIndexOf(
    												File.separator) + 1)
    								+ File.separator);
    					} else
    						zipFile(zos, file.getPath(), basePath);
    				}
    			} else {
    				ZipEntry ze = new ZipEntry(basePath);
    				zos.putNextEntry(ze);
    			}
    		}
    	}
    
    	private static void zipFile(ZipOutputStream zos, String filename,
    			String basePath) throws Exception {
    		File file = new File(filename);
    		if (file.exists()) {
    			FileInputStream fis = new FileInputStream(filename);
    			ZipEntry ze = new ZipEntry(basePath + file.getName());
    			zos.putNextEntry(ze);
    			byte[] buffer = new byte[8192];
    			int count = 0;
    			while ((count = fis.read(buffer)) > 0) {
    				zos.write(buffer, 0, count);
    			}
    			fis.close();
    		}
    	}
    }



    TestCompress.java

    import java.io.FileOutputStream;
    
    import com.xx.commmon.Zip;
    
    /**
     * 压缩文件测试
     */
    public class TestCompress {
    
    	public static void main(String[] args) {
    		// 要压缩的文件列表
    		String path01 = "E:\\下载\\cn_windows_8_x86_dvd_915414.iso";
    		String path02 = "e:\\PPT模版_V0.1.potx";
    		try {
    			FileOutputStream os = new FileOutputStream("e:\\测试.zip"); // 输出的ZIP文件流
    			Zip.compress(os, path01);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    
    }



    TestEctractZip.java

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.util.ArrayList;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipInputStream;
    
    /**
     * 解压缩测试
     */
    public class TestEctractZip {
    
    	@SuppressWarnings( { "unchecked", "static-access" })
    	public static void main(String[] args) {
    		TestEctractZip z = new TestEctractZip();
    		ArrayList<String> a = z.Ectract("C:\\a.zip", "C:\\tmp\\"); // 返回解压缩出来的文件列表
    		for(String s : a){
    			System.out.println(s);
    		}
    	}
    
    	/**
    	 * 解压缩
    	 * @param sZipPathFile 要解压的文件
    	 * @param sDestPath 解压到某文件夹
    	 * @return
    	 */
    	@SuppressWarnings("unchecked")
    	public static ArrayList Ectract(String sZipPathFile, String sDestPath) {
    		ArrayList<String> allFileName = new ArrayList<String>();
    		try {
    			// 先指定压缩档的位置和档名,建立FileInputStream对象
    			FileInputStream fins = new FileInputStream(sZipPathFile);
    			// 将fins传入ZipInputStream中
    			ZipInputStream zins = new ZipInputStream(fins);
    			ZipEntry ze = null;
    			byte[] ch = new byte[256];
    			while ((ze = zins.getNextEntry()) != null) {
    				File zfile = new File(sDestPath + ze.getName());
    				//File zfile = new File(sDestPath +File.separator+ ze.getName());
    				File fpath = new File(zfile.getParentFile().getPath());
    				if (ze.isDirectory()) {
    					if (!zfile.exists())
    						zfile.mkdirs();
    					zins.closeEntry();
    				} else {
    					if (!fpath.exists())
    						fpath.mkdirs();
    					FileOutputStream fouts = new FileOutputStream(zfile);
    					int i;
    					allFileName.add(zfile.getAbsolutePath());
    					while ((i = zins.read(ch)) != -1)
    						fouts.write(ch, 0, i);
    					zins.closeEntry();
    					fouts.close();
    				}
    			}
    			fins.close();
    			zins.close();
    		} catch (Exception e) {
    			System.err.println("Extract error:" + e.getMessage());
    		}
    		return allFileName;
    	}
    }


    新新:http://blog.csdn.net/xinxin19881112/article/details/46913931

    展开全文
  • Android zip文件压缩与解压

    万次阅读 2019-03-19 19:50:57
    Android zip文件压缩与解压 Android开发中偶尔需要用到zip文件的压缩与解压,正好公司项目需要用到,趁此机会特意总结了下,分享给大家,也是对我学习Android的记录。 zip压缩 Android中的zip压缩主要用到两个类:...

    Android zip文件压缩与解压

    Android开发中偶尔需要用到zip文件的压缩与解压,正好公司项目需要用到,趁此机会特意总结了下,分享给大家,也是对我学习Android的记录。

    zip压缩

    Android中的zip压缩主要用到两个类:ZipEntry,ZipOutputStream,ZipEntry类用于保存一些被压缩文件的信息,如文件名、修改时间等等,部分源码如下:

    class ZipEntry implements ZipConstants, Cloneable {
        String name;        // entry name
        long time = -1;     // modification time (in DOS time)
        long crc = -1;      // crc-32 of entry data
        long size = -1;     // uncompressed size of entry data
        long csize = -1;    // compressed size of entry data
        int method = -1;    // compression method
        int flag = 0;       // general purpose flag
        byte[] extra;       // optional extra field data for entry
        String comment;     // optional comment string for entry
        // Android-changed: Add dataOffset for internal use.
        long dataOffset;
    

    而ZipOutputStream是目标zip文件的输出流。zip压缩一共分为三步:

    1. 获取相应的ZipOutputStream;
    2. 判断是否是文件夹

    ​ (1)是:递归;

    ​ (2)否:根据文件路径、文件名等获取相应的ZipEntry,然后将该文件写入ZipOutputStream;

    1. 关闭相应的输出流;

      /**
       * 压缩文件
       * @param srcFile 待压缩的源文件
       * @param rootPath 源文件的根路径
       * @param zos Zip输出流
       * @param comment 备注
       * @return 压缩成功返回true
       * @throws IOException
       */
      private static boolean zipFile(final File srcFile,String rootPath,final ZipOutputStream zos,final String comment) throws IOException {
              rootPath = rootPath + (isSpace(rootPath) ? "" : File.separator) + srcFile.getName();
              if (srcFile.isDirectory()) {
                  File[] fileList = srcFile.listFiles();
                  if (fileList == null || fileList.length <= 0) {
                      ZipEntry entry = new ZipEntry(rootPath + '/');
                      entry.setComment(comment);
                      zos.putNextEntry(entry);
                      zos.closeEntry();
                  } else {
                      for (File file : fileList) {
                          if (!zipFile(file, rootPath, zos, comment)) return false;
                      }
                  }
              } else {
                  InputStream is = null;
                  try {
                      is = new BufferedInputStream(new FileInputStream(srcFile));
                      ZipEntry entry = new ZipEntry(rootPath);
                      entry.setComment(comment);
                      zos.putNextEntry(entry);
                      byte buffer[] = new byte[BUFFER_LEN];
                      int len;
                      while ((len = is.read(buffer, 0, BUFFER_LEN)) != -1) {
                          zos.write(buffer, 0, len);
                      }
                      zos.closeEntry();
                  } finally {
                      CloseUtils.closeIO(is);
                  }
              }
              return true;
          }
      

    zip解压

    /**
         * Unzip the file by keyword.
         *
         * @param zipFile The ZIP file.
         * @param destDir The destination directory.
         * @param keyword The keyboard.
         * @return the unzipped files
         * @throws IOException if unzip unsuccessfully
         */
        public static List<File> unzipFileByKeyword(final File zipFile,final File destDir,final String keyword) throws IOException {
            if (zipFile == null || destDir == null) return null;
            List<File> files = new ArrayList<>();
            ZipFile zip = new ZipFile(zipFile);
            Enumeration<?> entries = zip.entries();
            try {
                if (isSpace(keyword)) {
                    while (entries.hasMoreElements()) {
                        ZipEntry entry = ((ZipEntry) entries.nextElement());
                        String entryName = entry.getName();
                        if (entryName.contains("../")) {
                            Log.e("ZipUtils", "it's dangerous!");//防止被利用漏洞恶意修改文件
                            return files;
                        }
                        if (!unzipChildFile(destDir, files, zip, entry)) return files;
                    }
                } else {
                    while (entries.hasMoreElements()) {
                        ZipEntry entry = ((ZipEntry) entries.nextElement());
                        String entryName = entry.getName();
                        if (entryName.contains("../")) {
                            Log.e("ZipUtils", "it's dangerous!");
                            return files;
                        }
                        if (entryName.contains(keyword)) {
                            if (!unzipChildFile(destDir, files, zip, entry)) return files;
                        }
                    }
                }
            } finally {
                zip.close();
            }
            return files;
        }
    
    private static boolean unzipChildFile(final File destDir,final List<File> files,final ZipFile zip,final ZipEntry entry)
            throws IOException {
            File file = new File(destDir, entry.getName());
            files.add(file);
            if (entry.isDirectory()) {
                return createOrExistsDir(file);//创建文件夹
            } else {
                if (!createOrExistsFile(file)) return false;
                InputStream in = null;
                OutputStream out = null;
                try {
                    in = new BufferedInputStream(zip.getInputStream(entry));
                    out = new BufferedOutputStream(new FileOutputStream(file));
                    byte buffer[] = new byte[BUFFER_LEN];
                    int len;
                    while ((len = in.read(buffer)) != -1) {
                        out.write(buffer, 0, len);
                    }
                } finally {
                    if (in != null) {
                        in.close();
                    }
                    if (out != null) {
                        out.close();
                    }
                }
            }
            return true;
        }
    

    备注:代码实例来自开源框架AndroidUtilCode,https://github.com/Blankj/AndroidUtilCode 开源了各种开发过程中的常用工具,五星推荐。

    展开全文
  • Zip文件压缩与解压

    千次阅读 2017-05-08 17:54:06
    Java zip文件压缩与解压

    Zip文件压缩与解压

    1 Maven依赖

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>cn.soqi</groupId>
        <artifactId>cn.soqi.img</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <dependencies>
            <!--jai图片处理-->
            <dependency>
                <groupId>javax.media.jai</groupId>
                <artifactId>com.springsource.javax.media.jai.codec</artifactId>
                <version>1.1.3</version>
            </dependency>
            <dependency>
                <groupId>javax.media</groupId>
                <artifactId>jmf</artifactId>
                <version>2.1.1e</version>
            </dependency>
    
            <!--jai图片处理end-->
    
            <dependency>
                <groupId>org.apache.ant</groupId>
                <artifactId>ant</artifactId>
                <version>1.10.1</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>3.5</version>
            </dependency>
        </dependencies>
    
    
    </project>

    2 压缩成zip文件

    package cn.soqi.img;/**
     * Created by user on 2017/5/8.
     */
    
    /**
     * ZIP文件压缩工具类
     *
     * @author brozer
     * @email 798121446@qq.com
     * @create 2017-05-08 9:53
     */
    import org.apache.tools.zip.ZipEntry;
    import org.apache.tools.zip.ZipOutputStream;
    
    import java.io.*;
    
    //使用org.apache.tools.zip这个就不会中文乱码
    
    //使用java.util.zip原生ZipOutputStream与ZipEntry会中文乱码
    
    //import java.util.zip.ZipOutputStream;
    //import java.util.zip.ZipEntry;
    
    public class ZipCompress {
        static String filePath = "C:\\Users\\user\\Pictures\\png";//需要压缩的文件夹完整路径
        static String fileName = "png";//需要压缩的文件夹名
        static String outPath = "C:/Users/user/Desktop/zip.zip";//压缩完成后保存为Test.zip文件,名字随意
    
        public static void main(String args[]) throws Exception
        {
            OutputStream is = new FileOutputStream(outPath);//创建Test.zip文件
           // CheckedOutputStream cos = new CheckedOutputStream(is, new CRC32());//检查输出流,采用CRC32算法,保证文件的一致性
            ZipOutputStream zos = new ZipOutputStream(is);//创建zip文件的输出流
            zos.setEncoding("GBK");//设置编码,防止中文乱码
            File file = new File(filePath);//需要压缩的文件或文件夹对象
            ZipFile(zos,file);//压缩文件的具体实现函数
            zos.close();
           // cos.close();
            is.close();
            System.out.println("压缩完成");
        }
    
        //递归,获取需要压缩的文件夹下面的所有子文件,然后创建对应目录与文件,对文件进行压缩
        public static void ZipFile(ZipOutputStream zos,File file) throws Exception
        {
            if(file.isDirectory())
            {
                //创建压缩文件的目录结构
                String filePath=file.getPath();
                zos.putNextEntry(new ZipEntry(file.getPath().substring(file.getPath().indexOf(fileName))+File.separator));
    
                for(File f : file.listFiles())
                {
                    ZipFile(zos,f);
                }
            }
            else
            {
                //打印输出正在压缩的文件
                System.out.println("正在压缩文件:"+file.getName());
                //创建压缩文件
                zos.putNextEntry(new ZipEntry(file.getPath().substring(file.getPath().indexOf(fileName))));
                //用字节方式读取源文件
                InputStream is = new FileInputStream(file.getPath());
                //创建一个缓存区
                BufferedInputStream bis = new BufferedInputStream(is);
                //字节数组,每次读取1024个字节
                byte [] b = new byte[1024];
                //循环读取,边读边写
                while(bis.read(b)!=-1)
                {
                    zos.write(b);//写入压缩文件
                }
                //关闭流
                bis.close();
                is.close();
            }
        }
    }

    3 解压Zip文件

    package cn.soqi.img;/**
     * Created by user on 2017/5/8.
     */
    
    /**
     * Zip文件解压工具类
     *
     * @author brozer
     * @email 798121446@qq.com
     * @create 2017-05-08 10:27
     */
    import org.apache.tools.zip.ZipEntry;
    import org.apache.tools.zip.ZipFile;
    
    import java.io.*;
    import java.util.Enumeration;
    
    //使用org.apache.tools.zip这个就不会中文乱码
    
    //使用java.util.zip原生ZipOutputStream与ZipEntry会中文乱码
    //import java.util.zip.ZipEntry;
    //import java.util.zip.ZipFile;
    
    public class ZipDeCompress
    {
        static String zipPath = "C:/Users/user/Desktop/zip.zip";//需要解压的压缩文件
        static String outPath = "C:/Users/user/Desktop/";//解压完成后保存路径,记得"\\"结尾哈
        public static void deCompress(String zipPath,String outPath) throws Exception
        {
            zipPath=zipPath.replace("\\","/");
            outPath=outPath.replace("\\","/");
            if(!outPath.endsWith("/"))
                outPath=outPath+"/";
            ZipFile zipFile = new ZipFile(zipPath,"GBK");//压缩文件的实列,并设置编码
            //获取压缩文中的所以项
            for(Enumeration<ZipEntry> enumeration = zipFile.getEntries();enumeration.hasMoreElements();)
            {
                ZipEntry zipEntry = enumeration.nextElement();//获取元素
                //排除空文件夹
                if(!zipEntry.getName().endsWith(File.separator))
                {
                    System.out.println("正在解压文件:"+zipEntry.getName());//打印输出信息
                    //创建解压目录
                    String zipEntryStr=zipEntry.getName();
                    String fileNamePart=zipEntry.getName().substring(zipEntry.getName().lastIndexOf("/")+1,zipEntry.getName().length());
                    if(fileNamePart.trim().equals("")){
                        File f = new File(outPath+zipEntry.getName().substring(0, zipEntry.getName().lastIndexOf("/")));
                        //判断是否存在解压目录
                        if(!f.exists())
                        {
                            f.mkdirs();//创建解压目录
                        }
                    }else {
                        OutputStream os = new FileOutputStream(outPath + zipEntry.getName());//创建解压后的文件
                        BufferedOutputStream bos = new BufferedOutputStream(os);//带缓的写出流
                        InputStream is = zipFile.getInputStream(zipEntry);//读取元素
                        RgbToCmyk.rgbToCmyk(is,outPath+zipEntry.getName()); //解压文件,同时转换生成对应的CMYK文件
                        BufferedInputStream bis = new BufferedInputStream(is);//读取流的缓存流
                       // CheckedInputStream cos = new CheckedInputStream(bis, new CRC32());//检查读取流,采用CRC32算法,保证文件的一致性
                        byte[] b = new byte[1024];//字节数组,每次读取1024个字节
                        //循环读取压缩文件的值
                        while (bis.read(b) != -1) {
                            bos.write(b);//写入到新文件
                        }
                        bis.close();
                       // cos.close();
                        is.close();
                        bos.close();
                        os.close();
                    }
                }
                else
                {
                    //如果为空文件夹,则创建该文件夹
                    new File(outPath+zipEntry.getName()).mkdirs();
                }
            }
            System.out.println("解压完成");
            zipFile.close();
        }
    
        public static void main(String[] args) throws Exception {
            deCompress(zipPath,outPath);
        }
    }


    展开全文
  • Java实现zip文件压缩与解压缩--附完整代码

    万次阅读 多人点赞 2019-07-26 14:54:09
    Java实现文件压缩与解压缩-----zip、.7z1. 基本概念1.1 Java中实现zip的压缩与解压缩1.1.1 基本概念1.1.2 zip压缩代码实现1.3 zip压缩代码改进 1. 基本概念 1.1 Java中实现zip的压缩与解压缩 1.1.1 基本概念 ...

    Java中实现zip的压缩与解压缩

    1 基本概念

    1. ZipOutputStream 实现文件的压缩
    • ZipOutputStream (OutputStream out) 创建新的zip输出流
    • void putNextEntry(ZipEntry e) 开始写入新的zip文件条目并将流定位到条目数据的开始处
      条目指的是一个文件夹下的多个文件。
    • ZipEntry(String name) 使用指定名称创建新的zip条目
    1. ZipIutputStream实现文件的解压
    • ZipIutputStream (IutputStream out) 创建新的zip输入流
    • ZipEntry getNextEntry()读取下一个zip条目并将流定位到该条目数据的开始处

    2 zip压缩

    2.1 zip压缩代码实现

    1. 程序完整代码
    import java.io.BufferedInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipOutputStream;
    
    public class Uzip {
        /**
         * 压缩
         */
    
        public static void zip(String input, String output, String name) throws Exception {
        //要生成的压缩文件
            ZipOutputStream out = new ZipOutputStream(new FileOutputStream(output));
            String[] paths = input.split("\\|");
            File[] files = new File[paths.length];
            byte[] buffer = new byte[1024];
            for (int i = 0; i < paths.length; i++) {
                files[i] = new File(paths[i]);
            }
            for (int i = 0; i < files.length; i++) {
                FileInputStream fis = new FileInputStream(files[i]);
                if (files.length == 1 && name != null) {
                    out.putNextEntry(new ZipEntry(name));
                } else {
                    out.putNextEntry(new ZipEntry(files[i].getName()));
                }
                int len;
                // 读入需要下载的文件的内容,打包到zip文件
                while ((len = fis.read(buffer)) > 0) {
                    out.write(buffer, 0, len);
                }
                out.closeEntry();
                fis.close();
            }
            out.close();
        }
    
        public static void main(String[ ] args){
            try {
                zip("E:\\Testzip\\test\\ytt.html","E:\\Test.zip","testytt");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
    

    maven依赖:

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-compress</artifactId>
            <version>1.12</version>
        </dependency>
    
    1. 运行程序:

    在这里插入图片描述

    3.程序解读:

    • ZipEntry(String name) 只能实现一个固定条目的压缩,也就是你压缩什么就得写仔细它的路径,多个子文件压缩写法如下:
    public static void main(String[ ] args){
            try {
                zip("E:\\Testzip\\test\\ytt.html|E:\\Testzip\\uugg.html","E:\\Test.zip",null);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    

    注意

    一定要写全E:\\Testzip\\test\\ytt.html,如果写E:\\Testzip\\test\\ytt会报错,报错信息无访问权限。

    String input :定义的是待压缩文件的条目。

    String output:定义得到的压缩文件包.zip的名字。

    String name:定义压缩后的条目的名字,如果与压缩前保持一致,定义name为null即可。

    此程序无法实现对空文件夹的压缩。

    2.2 zip压缩代码改进

    改进的代码可以实现对任意文件的压缩,注意要写全文件类型,比如ytt.html,不允许省略.html。

    import java.io.*;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipOutputStream;
    
    /**
     * date: 2019/07/26
     * writed by yangtingting
     */
    public class FileZip {
        /**
         * zip文件压缩
         * @param inputFile 待压缩文件夹/文件名
         * @param outputFile 生成的压缩包名字
         */
    
        public static void ZipCompress(String inputFile, String outputFile) throws Exception {
            //创建zip输出流
            ZipOutputStream out = new ZipOutputStream(new FileOutputStream(outputFile));
            //创建缓冲输出流
            BufferedOutputStream bos = new BufferedOutputStream(out);
            File input = new File(inputFile);
            compress(out, bos, input,null);
            bos.close();
            out.close();
        }
        /**
         * @param name 压缩文件名,可以写为null保持默认
         */
        //递归压缩
        public static void compress(ZipOutputStream out, BufferedOutputStream bos, File input, String name) throws IOException {
            if (name == null) {
                name = input.getName();
            }
            //如果路径为目录(文件夹)
            if (input.isDirectory()) {
                //取出文件夹中的文件(或子文件夹)
                File[] flist = input.listFiles();
    
                if (flist.length == 0)//如果文件夹为空,则只需在目的地zip文件中写入一个目录进入
                {
                    out.putNextEntry(new ZipEntry(name + "/"));
                } else//如果文件夹不为空,则递归调用compress,文件夹中的每一个文件(或文件夹)进行压缩
                {
                    for (int i = 0; i < flist.length; i++) {
                        compress(out, bos, flist[i], name + "/" + flist[i].getName());
                    }
                }
            } else//如果不是目录(文件夹),即为文件,则先写入目录进入点,之后将文件写入zip文件中
            {
                out.putNextEntry(new ZipEntry(name));
                FileInputStream fos = new FileInputStream(input);
                BufferedInputStream bis = new BufferedInputStream(fos);
                int len;
                //将源文件写入到zip文件中
                byte[] buf = new byte[1024];
                while ((len = bis.read(buf)) != -1) {
                    bos.write(buf,0,len);
                }
                bis.close();
                fos.close();
            }
        }
        public static void main(String[] args) {
            try {
                ZipCompress("D:\\Test", "D:\\TestbyYTT.zip");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
    
    

    3 zip解压

    3.1 zip不完美实现

    1. 这个网上有很多代码的,比如:
    package file;
     
    import java.io.*;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipFile;
    import java.util.zip.ZipInputStream;
     
    public class Decompressing {
        public static void main(String[] args) {
            File file = new File("E:\\hello.zip");//当前压缩文件
            ZipInputStream zin;//创建ZipInputStream对象
            try {
                ZipFile zipFile = new ZipFile(file);//创建压缩文件对象
                zin = new ZipInputStream(new FileInputStream(file));//实例化对象,指明要解压的文件
                ZipEntry entry ;
                while (((entry=zin.getNextEntry())!=null)&& !entry.isDirectory()){//如果entry不为空,并不在同一个目录下
                    File tmp = new File(entry.getName());//解压出的文件路径
                    if (!tmp.exists()){//如果文件不存在
                        tmp.getParentFile().mkdirs();//创建文件父类文件夹路径
                        OutputStream os = new FileOutputStream(tmp);//将文件目录中的文件放入输出流
                        //用输入流读取压缩文件中制定目录中的文件
                        InputStream in = zipFile.getInputStream(entry);
                        int count = 0;
                        while ((count = in.read())!=-1){//如有输入流可以读取到数值
                            os.write(count);//输出流写入
                        }
                        os.close();
                        in.close();
                    }
                    zin.closeEntry();
                    System.out.println(entry.getName()+"解压成功");
                }
                zin.close();
     
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
     
    }
    

    以上代码运行时会抛出异常!!!!!!!!!

    做出相应更改:

    import java.io.*;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipInputStream;
    
    /**
     * date:2019/7/26
     * writed by yangtingting
     */
    
    public class zipUncompress {
        /**
         * zip文件解压
         *
         * @param inputFile   待解压文件夹/文件
         * @param destDirPath 解压路径
         */
        public static void zipUncompress(String inputFile, String destDirPath) throws Exception {
            File srcFile = new File(inputFile);//获取当前压缩文件
            // 判断源文件是否存在
            if (!srcFile.exists()) {
                throw new Exception(srcFile.getPath() + "所指文件不存在");
            }
            //开始解压
            //构建解压输入流
            ZipInputStream zIn = new ZipInputStream(new FileInputStream(srcFile));
            ZipEntry entry = null;
            File file = null;
            while ((entry = zIn.getNextEntry()) != null) {
                if (!entry.isDirectory()) {
                    file = new File(destDirPath, entry.getName());
                    if (!file.exists()) {
                        new File(file.getParent()).mkdirs();//创建此文件的上级目录
                    }
                    OutputStream out = new FileOutputStream(file);
                    BufferedOutputStream bos = new BufferedOutputStream(out);
                    int len = -1;
                    byte[] buf = new byte[1024];
                    while ((len = zIn.read(buf)) != -1) {
                        bos.write(buf, 0, len);
                    }
                    // 关流顺序,先打开的后关闭
                    bos.close();
                    out.close();
                }
            }
        }
        public static void main(String[] args) {
            try {
                zipUncompress("D:\\ytt.zip", "D:\\ytt的解压文件\\");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    

    完美运行!!!

    3.2 zip解压完美实现

    改进后的代码

    import java.io.*;
    import java.util.Enumeration;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipFile;
    
    /**
     * date:2019/7/26
     * writed by yangtingting
     */
    
    public class zipUncompress {
        /**
         * zip文件解压
         * @param inputFile  待解压文件夹/文件
         * @param destDirPath  解压路径
         */
        public static void zipUncompress(String inputFile,String destDirPath) throws Exception {
            File srcFile = new File(inputFile);//获取当前压缩文件
            // 判断源文件是否存在
            if (!srcFile.exists()) {
                throw new Exception(srcFile.getPath() + "所指文件不存在");
            }
            ZipFile zipFile = new ZipFile(srcFile);//创建压缩文件对象
            //开始解压
            Enumeration<?> entries = zipFile.entries();
            while (entries.hasMoreElements()) {
                ZipEntry entry = (ZipEntry) entries.nextElement();
                // 如果是文件夹,就创建个文件夹
                if (entry.isDirectory()) {
                    String dirPath = destDirPath + "/" + entry.getName();
                    srcFile.mkdirs();
                } else {
                    // 如果是文件,就先创建一个文件,然后用io流把内容copy过去
                    File targetFile = new File(destDirPath + "/" + entry.getName());
                    // 保证这个文件的父文件夹必须要存在
                    if (!targetFile.getParentFile().exists()) {
                        targetFile.getParentFile().mkdirs();
                    }
                    targetFile.createNewFile();
                    // 将压缩文件内容写入到这个文件中
                    InputStream is = zipFile.getInputStream(entry);
                    FileOutputStream fos = new FileOutputStream(targetFile);
                    int len;
                    byte[] buf = new byte[1024];
                    while ((len = is.read(buf)) != -1) {
                        fos.write(buf, 0, len);
                    }
                    // 关流顺序,先打开的后关闭
                    fos.close();
                    is.close();
                }
            }
        }
        public static void main(String[] args) {
            try {
                zipUncompress("D:\\ytt.zip","D:\\ytt的解压文件");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
    

    4 FileZip.class 实现.zip压缩与解压

    完整代码:

    import java.io.*;
    import java.util.zip.*;
    import java.util.zip.ZipEntry;
    
    /**
     * date: 2019/07/26
     * writed by yangtingting
     */
    public class FileZip {
        /**
         * zip文件压缩
         * @param inputFile 待压缩文件夹/文件名
         * @param outputFile 生成的压缩包名字
         */
    
        public static void ZipCompress(String inputFile, String outputFile) throws Exception {
            //创建zip输出流
            ZipOutputStream out = new ZipOutputStream(new FileOutputStream(outputFile));
            //创建缓冲输出流
            BufferedOutputStream bos = new BufferedOutputStream(out);
            File input = new File(inputFile);
            compress(out, bos, input,null);
            bos.close();
            out.close();
        }
        /**
         * @param name 压缩文件名,可以写为null保持默认
         */
        //递归压缩
        public static void compress(ZipOutputStream out, BufferedOutputStream bos, File input, String name) throws IOException {
            if (name == null) {
                name = input.getName();
            }
            //如果路径为目录(文件夹)
            if (input.isDirectory()) {
                //取出文件夹中的文件(或子文件夹)
                File[] flist = input.listFiles();
    
                if (flist.length == 0)//如果文件夹为空,则只需在目的地zip文件中写入一个目录进入
                {
                    out.putNextEntry(new ZipEntry(name + "/"));
                } else//如果文件夹不为空,则递归调用compress,文件夹中的每一个文件(或文件夹)进行压缩
                {
                    for (int i = 0; i < flist.length; i++) {
                        compress(out, bos, flist[i], name + "/" + flist[i].getName());
                    }
                }
            } else//如果不是目录(文件夹),即为文件,则先写入目录进入点,之后将文件写入zip文件中
            {
                out.putNextEntry(new ZipEntry(name));
                FileInputStream fos = new FileInputStream(input);
                BufferedInputStream bis = new BufferedInputStream(fos);
                int len=-1;
                //将源文件写入到zip文件中
                byte[] buf = new byte[1024];
                while ((len = bis.read(buf)) != -1) {
                    bos.write(buf,0,len);
                }
                bis.close();
                fos.close();
            }
        }
    
        /**
         * zip解压
         * @param inputFile 待解压文件名
         * @param destDirPath  解压路径
         */
    
        public static void ZipUncompress(String inputFile,String destDirPath) throws Exception {
            File srcFile = new File(inputFile);//获取当前压缩文件
            // 判断源文件是否存在
            if (!srcFile.exists()) {
                throw new Exception(srcFile.getPath() + "所指文件不存在");
            }
            //开始解压
            //构建解压输入流
            ZipInputStream zIn = new ZipInputStream(new FileInputStream(srcFile));
            ZipEntry entry = null;
            File file = null;
            while ((entry = zIn.getNextEntry()) != null) {
                if (!entry.isDirectory()) {
                    file = new File(destDirPath, entry.getName());
                    if (!file.exists()) {
                        new File(file.getParent()).mkdirs();//创建此文件的上级目录
                    }
                    OutputStream out = new FileOutputStream(file);
                    BufferedOutputStream bos = new BufferedOutputStream(out);
                    int len = -1;
                    byte[] buf = new byte[1024];
                    while ((len = zIn.read(buf)) != -1) {
                        bos.write(buf, 0, len);
                    }
                    // 关流顺序,先打开的后关闭
                    bos.close();
                    out.close();
                }
            }
        }
    
    
        public static void main(String[] args) {
            try {
                ZipCompress("D:\\Test", "D:\\TestbyYTT.zip");
                ZipUncompress("D:\\ytt.zip","D:\\ytt的解压文件");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
    展开全文
  • python zip文件 压缩1

    千次阅读 2010-07-28 22:37:00
    python zip文件 压缩1
  • Java实现zip文件压缩(单个文件、文件夹以及文件和文件夹的组合压缩) package com.ljheee.ziptool.core; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io...
  • C++ zip文件压缩解压缩 qt解压zip

    千次阅读 2018-03-30 17:18:22
    //解压缩 For unzipping, add "unzip.cpp" to your project. Then, for example, #include "unzip.h" // HZIP hz = OpenZip("c:\\stuff.zip",0); ZIPENTRY ze; GetZipItem(hz,-1,...
  • [Java] Java Zip文件压缩与解压缩

    千次阅读 2013-01-11 14:19:38
    下载地址:org.apache....下载下来解压缩后,该包中的ant.jar里面提供了zip文件压缩与解压缩的功能代码。在项目中引用该类库。 以下是ZipUtil类的代码,其实现了createZipFile 和 unZip两个功能 package com.u
  • java Zip文件压缩含加密

    千次阅读 2019-02-20 08:54:20
    以下是对文件压缩的方法,这里只是单个文件压缩,多个变通一下就可以。 首先下载一个jar包:zip4j-1.3.2.jar /** * 对压缩文件进行加密 */ public void ZipFileAndEncrypt(String filePath,String ...
  • Android Java 文件压缩处理。
  • ZIP4J---ZIP文件压缩与解压缩学习

    千次阅读 2016-09-27 14:27:27
    前JAVA API已提供对于ZIP文件压缩与解压缩,但网上总结不支持ZIP文件加密与解密甚至对于中文支持也有问题,于是果断找其他的支持加密解密的第三方包。 winzipaes 与 ZIP4J 都符合项目的要求 ,最终选择ZIP4J来...
  • 最近公司准备让各项目组提供公共工具组件,手中正好无事便研究其中一个工具 - 文件压缩与解压缩工具。  目前JAVA API已提供对于ZIP文件的压缩与解压缩,但网上总结不支持ZIP文件加密与解密甚至对于中文支持也有...
  • Android zip文件压缩解压缩

    千次阅读 2014-04-23 12:36:15
    * @return 压缩文件文件名称 * @throws ZipException 压缩文件格式有误时抛出 * @throws IOException 当解压缩过程出错时抛出 */ public static ArrayList<String> getEntriesNames(File zipFile) throws ...
  • Android zip文件压缩

    千次阅读 2012-08-27 17:15:38
    转载地址:... 1、文件压缩 import android.util.Log; import java.io.File; import java.io.FileInputStream; import java.io.File
  • PHP - Manual手册 - CLXXXVII. Zip File Functions - Zip文件压缩函数 - 概述CLXXXVII. Zip File Functions简介 This extension enables you to transparently read or write ZIP compressed archives and
  • #!/usr/bin/env python # -*- coding: utf-8 -*- '''' ...amp;... 提供了对zip文件的创建 读 写 追加 解压 zip文件 1. 创建一个匹配密码的对象 不能让密码重复 --&amp;gt; 设置一个最大值 +1...
  • 需要用java写一个文件压缩的程序,一开始准备用java库中的java.util.zip.ZipOutputStream,但是一搜,发现有中文乱码的问题,所以就用了org.apache.tools.zip.ZipOutputStream。 因为用的maven2构建的代码,所以找...
  •  注意:如果要对子目录进行迭代压缩压缩后的文件不能放在被压缩目录的子目录中,否则会异常,用脚趾想想也应该知道怎么回事.... zip.ExtractZip(@"/Storage Card/foo.zip", @"/Storage Card/压缩后存放的...
  • 借鉴ZLibWrap.DLL进行二次加工生成DLL文件,在C++builder中进行动态调用DLL,压缩与解压标准ZIP文件操作! 因为有中文操作需要多出一个参数,所以要使用两份,本来准备写类,用构造函数,但发现有点大才小用,就...
  • ZIP文件压缩和解压

    千次阅读 2017-11-22 11:27:00
    前面写了一篇文章 "ZIP文件压缩和解压", 介绍了" SharpZipLib.Zip " 的使用, 最近的项目中,在使用的过程中, 遇到一些问题. 比如, 现在从表里面取出数据, 生成xml字符串,然后生成zip文件流,上传到文件服务器. 以前...
  • java zip文件压缩与解压

    千次阅读 2011-11-08 14:30:03
    java里面有个包叫java.util.zip提供zip文件压缩,但是编码的时候非常不方便。编码量太多了,通过搜索,发现apache有个包提供一些简单的方法来实现zip文件的压缩与解压缩http://ant.apache.org/。下载地址:org....
  • c# 文件压缩或解压 Zip格式
  • 这篇文章主要介绍了Python压缩压缩zip文件及尝试破解zip文件密码的方法,给出了一个使用zipfile模块的简单示例,需要的朋友可以参考下 python 的 zipfile 提供了非常便捷的方法来压缩和解压 zip 文件。 例如,在py...
  • 欢迎访问个人博客 德鲁大叔撸代码 说明:注意引入的依赖!!!! 否则一直报错 很不容易找到的错误!!! import net.lingala.zip4j.core.ZipFile;...一、压缩文件 @Test public void createZipFile(){ Stri...
  • Java压缩和解压缩zip文件

    千次阅读 2019-08-05 15:21:47
    介绍 Java提供的java.util.zip包只支持zip和gzip。至于更多格式的压缩可以选择apache的Commons Compress。 参考:...读取zip文件列表 package com.dylan.ja...
  • java读取名为T11.zip文件,解压后再生成名为T22.zip文件。 代码如下: import java.io.*; import java.util.zip.*; public class ReadWriteZip { public static void main(String[] args) throws ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 30,416
精华内容 12,166
关键字:

zip文件压缩