2016-06-29 17 views
5

Ich muss eine komprimierte Datei öffnen (zml, ich konnte keine Informationen über diese Erweiterung finden) wie 7zip tut es mit Java.Dekomprimieren einer Datei wie 7zip mit Java

Ich habe eine ZML-Datei, wenn ich es mit 7zip öffne fragt sie mich nach dem Passwort, dann lege ich das Passwort und kann die Datei öffnen.

Ich muss das gleiche mit Java tun, könnte mir jemand einen Rat dafür geben?

Mit freundlichen Grüßen.

Juan

+2

Hallo. Ich denke, die 7zip Java Bindings sind wahrscheinlich, was Sie suchen: http://sevenzipjbind.sourceforge.net/index.html – trooper

+0

Vielen Dank, ich werde einen Blick darauf werfen. –

+0

Ich habe mit den Dateieigenschaften der 7zip gefunden, dass die Datei ein Zip war, also benutze ich Zip4j. Ich könnte die Datei nach den Anweisungen dieses Beitrags decompress: https://stackoverflow.com/questions/11174851/how-to-use-zip4j-to-extract-a-zip-file-with-password-protection Danke euch allen für deine Hilfe. –

Antwort

3

Basierend auf @trooper Kommentar konnte ich eine .7z Datei extrahieren, die Passwort geschützt war. Probieren Sie den folgenden Code aus. Sie müssen Ihren Klassenpfad mit 7-Zip-JBinding (http://sevenzipjbind.sourceforge.net/index.html) einrichten. Dieser Code ist eine modifizierte Version von Code-Schnipsel gefunden bei http://sevenzipjbind.sourceforge.net/extraction_snippets.html

import java.io.FileNotFoundException; 
import java.io.RandomAccessFile; 
import java.util.Arrays; 

import net.sf.sevenzipjbinding.ExtractOperationResult; 
import net.sf.sevenzipjbinding.IInArchive; 
import net.sf.sevenzipjbinding.ISequentialOutStream; 
import net.sf.sevenzipjbinding.SevenZip; 
import net.sf.sevenzipjbinding.SevenZipException; 
import net.sf.sevenzipjbinding.SevenZipNativeInitializationException; 
import net.sf.sevenzipjbinding.impl.RandomAccessFileInStream; 
import net.sf.sevenzipjbinding.simple.ISimpleInArchive; 
import net.sf.sevenzipjbinding.simple.ISimpleInArchiveItem; 

public class Extract { 
    public static void main(String[] args) throws SevenZipException, FileNotFoundException { 
     try { 
      SevenZip.initSevenZipFromPlatformJAR(); 
      System.out.println("7-Zip-JBinding library was initialized"); 
      RandomAccessFile randomAccessFile = new RandomAccessFile("YOUR FILE NAME", "r"); 

      IInArchive inArchive = SevenZip.openInArchive(null, // Choose format 
                   // automatically 
        new RandomAccessFileInStream(randomAccessFile)); 
      System.out.println(inArchive.getNumberOfItems()); 

      // Getting simple interface of the archive inArchive 
      ISimpleInArchive simpleInArchive = inArchive.getSimpleInterface(); 

      System.out.println(" Hash | Size | Filename"); 
      System.out.println("----------+------------+---------"); 

      for (ISimpleInArchiveItem item : simpleInArchive.getArchiveItems()) { 
       final int[] hash = new int[] { 0 }; 
       if (!item.isFolder()) { 
        ExtractOperationResult result; 

        final long[] sizeArray = new long[1]; 
        result = item.extractSlow(new ISequentialOutStream() { 
         public int write(byte[] data) throws SevenZipException { 
          hash[0] ^= Arrays.hashCode(data); // Consume data 
          for (byte b : data) { 
           System.out.println((char) b); 
          } 
          sizeArray[0] += data.length; 
          return data.length; // Return amount of consumed 
               // data 
         } 
        }, "YOUR PASSWORD HERE"); 

        if (result == ExtractOperationResult.OK) { 
         System.out.println(String.format("%9X | %10s | %s", hash[0], sizeArray[0], item.getPath())); 
        } else { 
         System.err.println("Error extracting item: " + result); 
        } 
       } 
      } 

     } catch (SevenZipNativeInitializationException e) { 
      e.printStackTrace(); 
     } 
    } 

} 
3

Wenn Sie für eine reine Java-Lösung suchen, können Sie Apache Commons Compress verwenden, die auch verschlüsselte Dateien unterstützt das Lesen.