2017-07-08 3 views
0

Je suis nouveau à Java et en essayant d'écrire un programme qui décompressera tous les fichiers zip protégés par mot de passe dans un répertoire, je suis capable de décompresser tout le zip normal fichiers (sans mot de passe) mais je ne suis pas sûr de savoir comment décompresser les fichiers protégés par mot de passe. Note: Tous les fichiers zip ont même mot de passeComment décompresser tous les fichiers zip protégés par mot de passe dans un répertoire en utilisant Java

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 net.lingala.zip4j.core.ZipFile; 
import net.lingala.zip4j.model.FileHeader; 

import java.util.zip.*; 

public class Extraction { 
    // public Extraction() { 
    // 
    // try { 
    // 
    // ZipFile zipFile = new 
    // ZipFile("C:\\Users\\Desktop\\ZipFile\\myzip.zip"); 
    // 
    // if (zipFile.isEncrypted()) { 
    // 
    // zipFile.setPassword("CLAIMS!"); 
    // } 
    // 
    // 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(); 
    // 
    // } 
    // } 

    public static void main(String[] args) { 
     Extraction unzipper = new Extraction(); 
     unzipper.unzipZipsInDirTo(Paths.get("C:\\Users\\Desktop\\ZipFile"), 
       Paths.get("C:\\Users\\Desktop\\ZipFile\\Unziped")); 

    } 

    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"); 
     } 
    } 

} 

Répondre

0

Merci les gars mais aucune réponse à ma question. J'ai trouvé la réponse que je publie, car il pourrait y avoir quelqu'un d'autre qui pourrait chercher la réponse similaire.

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"); 
      } 
     } 

    } 
}