Compress and decompress files using the java.util.zip package

The import java.util.zip.*; package in the Java API contains all Java operations related to compressed files.

We can use the methods in this package, combined with the relevant knowledge in IO, to perform file compression and decompression related operations.

ZipFile

Every compressed file in java can be represented using ZipFile.
        File file = new File("F:/zippath.zip");
        ZipFile zipFile = new ZipFile(file);
        System.out.println("The name of the compressed file is: " + zipFile.getName());

Compress a single file

    /** Compress a single file */
    public static void ZipFile(String filepath ,String zippath) {
    	try {
            File file = new File(filepath);
            File zipFile = new File(zippath);
            InputStream input = new FileInputStream(file);
            ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFile));
            zipOut.putNextEntry(new ZipEntry(file.getName()));
            int temp = 0;
            while((temp = input.read()) != -1){
                zipOut.write(temp);
            }
            input.close();
            zipOut.close();
		} catch (Exception e) {
			e.printStackTrace ();
		}
	}

application:

ZipFile("d:/hello.txt", "d:/hello.zip");

Compress multiple files (folders)

    /** Compress multiple files at one time and store the files in one folder*/
    public static void ZipMultiFile(String filepath ,String zippath) {
		try {
	        File file = new File(filepath);// Folder to be compressed
	        File zipFile = new File(zippath);
	        InputStream input = null;
	        ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFile));
	        if(file.isDirectory()){
	            File[] files = file.listFiles();
	            for(int i = 0; i < files.length; ++i){
	                input = new FileInputStream(files[i]);
	                zipOut.putNextEntry(new ZipEntry(file.getName() + File.separator + files[i].getName()));
	                int temp = 0;
	                while((temp = input.read()) != -1){
	                    zipOut.write(temp);
	                }
	                input.close();
	            }
	        }
	        zipOut.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

应用:

ZipMultiFile("f:/uu", "f:/zippath.zip");

解压缩单个文件

    /**  解压缩(解压缩单个文件)*/
    public static void ZipContraFile(String zippath ,String outfilepath ,String filename) {
		try {
	        File file = new File(zippath);//压缩文件路径和文件名
	        File outFile = new File(outfilepath);//解压后路径和文件名
	        ZipFile zipFile = new ZipFile(file);
	        ZipEntry entry = zipFile.getEntry(filename);//所解压的文件名
	        InputStream input = zipFile.getInputStream(entry);
	        OutputStream output = new FileOutputStream(outFile);
	        int temp = 0;
	        while((temp = input.read()) != -1){
	            output.write(temp);
	        }
	        input.close();
	        output.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

应用:

ZipContraFile("d:/hello.zip","d:/eee.txt", "hello.txt");

 解压缩多个文件

ZipInputStream类:
当我们需要解压缩多个文件的时候,ZipEntry就无法使用了。
 如果想操作更加复杂的压缩文件,我们就必须使用ZipInputStream类。
    /**  解压缩(压缩文件中包含多个文件)可代替上面的方法使用。
     * ZipInputStream类
     * 当我们需要解压缩多个文件的时候,ZipEntry就无法使用了,
     * 如果想操作更加复杂的压缩文件,我们就必须使用ZipInputStream类
     * */
    public static void ZipContraMultiFile(String zippath ,String outzippath){
    	try {
            File file = new File(zippath);
            File outFile = null;
            ZipFile zipFile = new ZipFile(file);
            ZipInputStream zipInput = new ZipInputStream(new FileInputStream(file));
            ZipEntry entry = null;
            InputStream input = null;
            OutputStream output = null;
            while((entry = zipInput.getNextEntry()) != null){
                System.out.println("解压缩" + entry.getName() + "文件");
                outFile = new File(outzippath + File.separator + entry.getName());
                if(!outFile.getParentFile().exists()){
                    outFile.getParentFile().mkdir();
                }
                if(!outFile.exists()){
                    outFile.createNewFile();
                }
                input = zipFile.getInputStream(entry);
                output = new FileOutputStream(outFile);
                int temp = 0;
                while((temp = input.read()) != -1){
                    output.write(temp);
                }
                input.close();
                output.close();
            }
		} catch (Exception e) {
			e.printStackTrace();
		}
    }

应用:

        ZipContraMultiFile("f:/zippath.zip", "d:/");
        ZipContraMultiFile("d:/hello.zip", "d:/");

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=326640801&siteId=291194637