java解密zip文件(亲测可用)

来源:互联网 发布:linux如何安装wine 编辑:程序博客网 时间:2024/05/10 20:02

之前我们写过java如何实现zip文件的解压,而有时,当我们的zip文件进行了加密(在我们知道秘钥的情况下),又想在查看的时候使用,故而需要使用解密


代码是从网上找的,没有做任何修改,测试了一下,不管是否安装压缩软件,密码是否含有中文,(windows下)都可以使用,需要的可以看一下,jar包可以在我的资源上下载一下,免费的,也是我从其他人那里花积分换的


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[0] |= 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[0], 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 0
原创粉丝点击