简体   繁体   中英

How to unzip multiple pssword protected zip files in an directory which has same password using java?

I am very new to java and I am trying to write an java program to unzip all zip files in an directory all of which have same password. I have written an program which unzips an particular zip file by giving the password.

import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.PathMatcher;
import java.nio.file.Paths;
import java.util.List;
import java.util.stream.Stream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

//import java.util.zip.ZipFile;
import net.lingala.zip4j.core.ZipFile;
import net.lingala.zip4j.model.FileHeader;

public class Extraction {
     public Extraction() {

     try {

     ZipFile zipFile = new
     ZipFile("C:\\Users\\Desktop\\ZipFile\\myzip.zip");

     if (zipFile.isEncrypted()) {

     zipFile.setPassword("MYPASS!");
     }

     List fileHeaderList = zipFile.getFileHeaders();

     for (int i = 0; i < fileHeaderList.size(); i++) {
     FileHeader fileHeader = (FileHeader) fileHeaderList.get(i);

     zipFile.extractFile(fileHeader, "C:\\Users\\Desktop\\ZipFile");
     System.out.println("Extracted");
     }

     } catch (Exception e) {
     System.out.println("Please Try Again");
     }

     }
        public static void main(String[] args) {
            new Extraction();

        }
}

I have also written an code which unzips all the zip files (Which are not password protected) in an folder.

import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.PathMatcher;
import java.nio.file.Paths;
import java.util.List;
import java.util.stream.Stream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

//import java.util.zip.ZipFile;
import net.lingala.zip4j.core.ZipFile;
import net.lingala.zip4j.model.FileHeader;

public class Extraction {


    public static void main(String[] args) {
        Extraction unzipper = new Extraction();
        unzipper.unzipZipsInDirTo(Paths.get("D:/"), Paths.get("D:/unzipped"));

    }

    public void unzipZipsInDirTo(Path searchDir, Path unzipTo) {

        final PathMatcher matcher = searchDir.getFileSystem().getPathMatcher("glob:**/*.zip");
        try (final Stream<Path> stream = Files.list(searchDir)) {
            stream.filter(matcher::matches).forEach(zipFile -> unzip(zipFile, unzipTo));
        } catch (Exception e) {
            System.out.println("Something went wrong, Please try again!!");
        }
    }

    public void unzip(Path zipFile, Path outputPath) {
        try (ZipInputStream zis = new ZipInputStream(Files.newInputStream(zipFile))) {

            ZipEntry entry = zis.getNextEntry();

            while (entry != null) {

                Path newFilePath = outputPath.resolve(entry.getName());
                if (entry.isDirectory()) {
                    Files.createDirectories(newFilePath);
                } else {
                    if (!Files.exists(newFilePath.getParent())) {
                        Files.createDirectories(newFilePath.getParent());
                    }
                    try (OutputStream bos = Files.newOutputStream(outputPath.resolve(newFilePath))) {
                        byte[] buffer = new byte[Math.toIntExact(entry.getSize())];

                        int location;

                        while ((location = zis.read(buffer)) != -1) {
                            bos.write(buffer, 0, location);
                        }
                    }
                }
                entry = zis.getNextEntry();
            }
        } catch (Exception e1) {
            System.out.println("Please try again");
        }
    }

}

I am bit confused how to integrate these 2 codes to make an program which unzips all the zip files in an directory which are password protected and has the same password. Can anyone of you help me in integrating these 2 codes. I searched a lot but did not get proper resolution so I am posting this. I hope my question is clear.

Thanks guys although none answered my question. I found the answer I am posting this as there might be someone else who might be looking for the similar answer.

import java.io.File;
import java.util.List;

import javax.swing.filechooser.FileNameExtensionFilter;

import net.lingala.zip4j.core.ZipFile;
import net.lingala.zip4j.model.FileHeader;

public class SamExtraction {

    public static void main(String[] args) {

        final FileNameExtensionFilter extensionFilter = new FileNameExtensionFilter("N/A", "zip");
        //Folder where zip file is present
        final File file = new File("C:/Users/Desktop/ZipFile");
        for (final File child : file.listFiles()) {
            try {
                ZipFile zipFile = new ZipFile(child);
                if (extensionFilter.accept(child)) {
                    if (zipFile.isEncrypted()) {
                        //Your ZIP password
                        zipFile.setPassword("MYPASS!");
                    }
                    List fileHeaderList = zipFile.getFileHeaders();

                    for (int i = 0; i < fileHeaderList.size(); i++) {
                        FileHeader fileHeader = (FileHeader) fileHeaderList.get(i);
                        //Path where you want to Extract
                        zipFile.extractFile(fileHeader, "C:/Users/Desktop/ZipFile");
                        System.out.println("Extracted");
                    }
                }
            } catch (Exception e) {
                System.out.println("Please Try Again");
            }
        }

    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM