ZipInputStream 和 ZipOutputStream

ZipInputStream 和 ZipOutputStream 可以用于处理 ZIP 文件格式,ZipInputStream 可以从 ZIP 文件中读取数据,ZipOutputStream 可以向 ZIP 文件中写入数据。

ZipInputStream示例代码

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class ZipExample {
    public static void main(String[] args) throws IOException {
        String inputFile = "/Users/yuxinjiao/Documents/source.txt";
        String outputFile = "/Users/yuxinjiao/Documents/source.zip";
//        设置zipoutputstream,并设置压缩级别
        ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(outputFile));
        zipOutputStream.setLevel(9);
//        读取需要压缩的文件到文件输入流
        FileInputStream fileInputStream = new FileInputStream(inputFile);
        BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
//        设置压缩文件内部到名称
        ZipEntry zipEntry = new ZipEntry(inputFile);
        zipOutputStream.putNextEntry(zipEntry);
//        写入压缩文件
        byte[] buf = new byte[1024];
        int len;
        while((len=bufferedInputStream.read(buf))>0) {
            zipOutputStream.write(buf, 0, len);
        }
        bufferedInputStream.close();
        zipOutputStream.closeEntry();
        zipOutputStream.close();
        System.out.println("file compressed successfully");
    }
}

示例代码说明:

  1. 首先,我们创建ZipOutputStream并设置压缩级别。
  2. 接着,我们创建输入文件的FileInputStream,并使用BufferedInputStream包装它。
  3. 我们接着设置压缩文件内部的名称,并使用zipOutputStream.putNextEntry()方法将其写入ZipOutputStream中。
  4. 最后,我们从缓冲区读取文件数据并将其写入ZipOutputStream中。最后关闭输入流和ZipOutputStream。
     

ZipOutputStream示例代码 

import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public class UnzipExample {
    public static void main(String[] args) throws IOException {
        String inputFile = "/Users/yuxinjiao/Documents/source.zip";
        String outputFile = "/Users/yuxinjiao/Documents/source";
        ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(inputFile));
        ZipEntry zipEntry = zipInputStream.getNextEntry();
        while(zipEntry !=null) {
            // 如果是目录,则创建空目录
            if(zipEntry.isDirectory()) {
                new File(outputFile+File.separator+zipEntry.getName()).mkdirs();
            } else {
                // 如果是文件,则输出文件
                FileOutputStream fileOutputStream = new FileOutputStream(outputFile+File.separator
                +zipEntry.getName());
                byte[] buf = new byte[1024];
                int len;
                while((len=zipInputStream.read(buf))>0){
                    fileOutputStream.write(buf, 0, len);
                }
                fileOutputStream.close();
            }
            zipInputStream.closeEntry();
            zipEntry = zipInputStream.getNextEntry();
        }
        zipInputStream.close();
        System.out.println("file uncompressed successfully");
    }
}

示例代码说明:

  1. 使用ZipInputStream从指定输入文件中解压文件到指定的输出文件夹中。
  2. 我们创建ZipInputStream,然后循环读取压缩文件中的条目。如果当前条目是目录,则创建空目录,并使用mkdirs()方法创建目录。如果当前条目是文件,则使用FileOutputStream将文件写入到指定的输出文件中。
  3. 最后关闭当前ZipEntry,并通过getNextEntry()方法获取ZipInputStream中的下一个条目。
     

你可能感兴趣的:(Netty,java,nio)