2016-06-29 20 views
5

7zip'in java ile yaptığı gibi bir sıkıştırılmış dosya açmam gerekiyor (zml, bu uzantı hakkında bilgi bulamadım).7zip gibi bir dosyanın Java ile sıkıştırılması

Bir zml dosyası var, eğer 7zip ile açtığımda şifre için bana sorarsa, şifreyi koyarım ve dosyayı açabilirim.

Aynı şeyi java ile yapmam gerek, bu konuda bana bir tavsiye verebilir misiniz?

Saygılarımızla.

Juan

+2

Merhaba. 7zip java bağlantılarının muhtemelen aradığınız şey olduğunu düşünüyorum: http://sevenzipjbind.sourceforge.net/index.html – trooper

+0

Teşekkür ederim, bir bakacağım. –

+0

7zip'in dosya özellikleriyle dosyanın bir zip dosyası olduğunu buldum, bu yüzden Zip4j kullanıyorum. Bu yazının yönergelerini takip ederek dosyayı daraltabilirim: https://stackoverflow.com/questions/11174851/how-to-use-zip4j-to-extract-an-zip-file-with-password-protection Herkese teşekkürler yardımın için. –

cevap

3

@trooper comment dayanarak, şifre korumalı bir .7z dosyayı ayıklamak başardı. Aşağıdaki kodu deneyin. Sınıf yolunuzu 7-Zip-JBinding (http://sevenzipjbind.sourceforge.net/index.html) ile kurmanız gerekecektir. Bu kod kod pasajlarının değiştirilmiş sürümü saf java çözüm ararlar, ayrıca şifrelenmiş dosyaları okuma destekler Apache Commons Compress kullanabilirsiniz 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

de bulunur.

İlgili konular