2017-07-08 75 views
0

我是新來的java,並試圖編寫一個程序,將解壓所有密碼保護的zip文件在一個目錄中,我能夠解壓所有正常的zip文件(沒有密碼),但我不知道如何解壓密碼保護的文件。 注意:所有的zip文件具有相同的密碼如何解壓所有密碼保護的zip文件在一個目錄中使用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"); 
     } 
    } 

} 

回答

0

謝謝你們雖然沒有回答我的問題。 我發現了我發佈的答案,因爲可能有其他人可能正在尋找類似的答案。

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

    } 
} 
相關問題