Decompress files with .7z extension in java

匿名 (未验证) 提交于 2019-12-03 01:11:01

问题:

Can someone advice (give example) any appropriate and understandable way how to extract file or files with .7z extension basing upon InputStream. I have been examined the XZ for java api, but couldn't succeed. Waiting for any suggestion.

回答1:

This code might help you.

    import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.RandomAccessFile; import java.util.Arrays;  import net.sf.sevenzipjbinding.ExtractOperationResult; import net.sf.sevenzipjbinding.ISequentialOutStream; import net.sf.sevenzipjbinding.ISevenZipInArchive; import net.sf.sevenzipjbinding.SevenZip; import net.sf.sevenzipjbinding.SevenZipException; import net.sf.sevenzipjbinding.impl.RandomAccessFileInStream; import net.sf.sevenzipjbinding.simple.ISimpleInArchive; import net.sf.sevenzipjbinding.simple.ISimpleInArchiveItem;  public class unzip {     public static void main(String[] args) {          RandomAccessFile randomAccessFile = null;         ISevenZipInArchive inArchive = null;          try {             randomAccessFile = new RandomAccessFile("oclHashcat-plus-0.14.7z", "r");             inArchive = SevenZip.openInArchive(null, // autodetect archive type                     new RandomAccessFileInStream(randomAccessFile));              // Getting simple interface of the archive inArchive             ISimpleInArchive simpleInArchive = inArchive.getSimpleInterface();              System.out.println("   Hash   |    Size    | Filename");             System.out.println("----------+------------+---------");              for (final 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 {                              //Write to file                             FileOutputStream fos;                             try {                                 File file = new File(item.getPath());                                 file.getParentFile().mkdirs();                                 fos = new FileOutputStream(file);                                 fos.write(data);                                 fos.close();                              } catch (FileNotFoundException e) {                                 // TODO Auto-generated catch block                                 e.printStackTrace();                             } catch (IOException e) {                                 // TODO Auto-generated catch block                                 e.printStackTrace();                             }                              hash[0] ^= Arrays.hashCode(data); // Consume data                             sizeArray[0] += data.length;                             return data.length; // Return amount of consumed data                         }                     });                     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 (Exception e) {             System.err.println("Error occurs: " + e);             System.exit(1);         } finally {             if (inArchive != null) {                 try {                     inArchive.close();                 } catch (SevenZipException e) {                     System.err.println("Error closing archive: " + e);                 }             }             if (randomAccessFile != null) {                 try {                     randomAccessFile.close();                 } catch (IOException e) {                     System.err.println("Error closing file: " + e);                 }             }         }     } } 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!