Java压缩与解压缩

一、jdk对压缩支持

 java对文件的压缩与解压缩提供了以下几个类:

  ZipFile:此类用于从 ZIP 文件读取条目。

  ZipEntry:此类用于表示 ZIP 文件条目。

  ZipInputStream:此类为读取 ZIP 文件格式的文件实现输入流过滤器。包括对已压缩和未压缩  条目的支持。

  ZipOutputStream:此类为以 ZIP 文件格式写入文件实现输出流过滤器。包括对已压缩和未压缩条目的支持

二、java压缩与解压

 1、压缩:创建词条(ZipEntry),然后利用流向词条中写入文件

 1)、压缩单个文件

File zipFile = new File(zipPath);
            zipFile.getParentFile().mkdirs();
            ZipOutputStream out = new
               
            ZipOutputStream(new FileOutputStream(zipPath));
               
            // 写一个文件
            File f = new File("C:\\1.txt");
            // 添加一个ZipEntry对象
            out.putNextEntry(new ZipEntry("copy1.txt"));
            FileInputStream in = new
               
            FileInputStream(f);
            int b;
            while ((b = in.read()) != -1) {
                out.write(b);
            }
               
            in.close();

 2)、向压缩文件内的文件夹添加压缩条目

// 在压缩文件中创建一个文件夹
            out.putNextEntry(new ZipEntry("abc/"));
            // 向这个压缩中的文件夹写入一个文件
            File f1 = new File("C:\\1.txt");
            // 注意这里是文件在压缩文件中的位置,在解压的时候它的那么也是这个
        
            out.putNextEntry(new ZipEntry("abc/copy2.txt"));
            FileInputStream in1 = new FileInputStream(f1);
            int b1;
        
            while ((b1 = in1.read()) != -1) {
                out.write(b1);
            }
            in1.close();
        
            System.out.println("压缩完成");
            // 没有关闭的话文件会存在异常
            out.close();

2、解压

// 压缩文件转回文件形式
    public static void zip2file() {
        try {
            ZipInputStream in = new ZipInputStream(new FileInputStream(
     
            "C:\\abcdefg.zip"));
            ZipEntry z = null;
            while ((z = in.getNextEntry()) != null) {
     
                if (z.isDirectory()) {
                    File f = new File("C:\\123\\" + z.getName() + "\\");
                    // 这里将文件夹创建,压缩文件夹中的文件也会当做一个个ZipEntry类,文件夹也是一个ZipEntry类。
                    f.mkdirs();
                } else {
     
                    File f = new File("C:\\123\\" + z.getName());
                    OutputStream out = new FileOutputStream(f);
     
                    int b;
                    while ((b = in.read()) != -1) {
                        out.write(b);
     
                    }
                    out.close();
                }
            }
            // 记得关闭
     
            in.close();
     
        } catch (Exception e) {
            // 这里最好写点东西,要不出错也不知道
            e.printStackTrace();
        }
     
    }


你可能感兴趣的:(java,压缩)