JAVA使用7-zip解压缩带密码的Zip文件(非Proccess方法)
首先到sourceforge网站下载sevenzipjbinding压缩包我下载的版本是sevenzipjbinding-4.65-1.04-rc-extr-only-AllWindows.zip
下载地址如下:
https://sourceforge.net/projects/sevenzipjbind/files/7-Zip-JBinding/4.65-1.04rc-extr-only/sevenzipjbinding-4.65-1.04-rc-extr-only-AllWindows.zip/download
编写代码如下:
public void unzipDirWithPassword( final String sourceZipFile , final String destinationDir , final String password ){ RandomAccessFile randomAccessFile = null; ISevenZipInArchive inArchive = null; try{ randomAccessFile = new RandomAccessFile(sourceZipFile, "r"); inArchive = SevenZip.openInArchive(null, // autodetect archive type new RandomAccessFileInStream(randomAccessFile)); // Getting simple interface of the archive inArchive ISimpleInArchive simpleInArchive = inArchive.getSimpleInterface(); for (final ISimpleInArchiveItem item : simpleInArchive.getArchiveItems()){ final int[] hash = new int[] { 0 }; if (!item.isFolder()){ ExtractOperationResult result; result = item.extractSlow(new ISequentialOutStream(){ public int write(final byte[] data) throws SevenZipException{ try{ if(item.getPath().indexOf(File.separator)>0){ String path = destinationDir+File.separator+item.getPath(). substring(0,item.getPath().lastIndexOf(File.separator)); File folderExisting = new File(path); if (!folderExisting.exists()) new File(path).mkdirs(); } if(!new File(destinationDir + File.separator+item.getPath()).exists()){ new File(destinationDir).createNewFile(); } OutputStream out = new FileOutputStream(destinationDir+ File.separator+item.getPath()); out.write(data); out.close(); }catch( Exception e ){ e.printStackTrace(); } hash |= Arrays.hashCode(data); return data.length; // Return amount of proceed data } },password); /// password. if (result == ExtractOperationResult.OK){ System.out.println(String.format("%9X | %s", hash, item.getPath())); }else{ System.err.println("Error extracting item: " + result); } } } } catch (Exception e){ e.printStackTrace(); } finally { if (inArchive != null){ try { inArchive.close(); } catch (SevenZipException e){ System.err.println("Error closing archive: " + e); e.printStackTrace(); } } if (randomAccessFile != null) { try{ randomAccessFile.close(); } catch (IOException e){ System.err.println("Error closing file: " + e); e.printStackTrace(); } } } } 特别提示:压缩文件的文件如果大小为0,则解压缩不出来文件
页:
[1]