java解密zip文件(亲测可用)
2016-03-08 10:21
316 查看
之前我们写过java如何实现zip文件的解压,而有时,当我们的zip文件进行了加密(在我们知道秘钥的情况下),又想在查看的时候使用,故而需要使用解密
代码是从网上找的,没有做任何修改,测试了一下,不管是否安装压缩软件,密码是否含有中文,(windows下)都可以使用,需要的可以看一下,jar包可以在我的资源上下载一下,免费的,也是我从其他人那里花积分换的
代码是从网上找的,没有做任何修改,测试了一下,不管是否安装压缩软件,密码是否含有中文,(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(); } } } }
相关文章推荐
- eclipse中maven配置文件pom.xml解析报错
- 如何在SpringMVC中获取request对象
- java设计模式——创建型之原型模式
- Spring配置事务管理,service端通过@Transactional注解
- leetcode:Path Sum II 【Java】
- Pat1012. 数字分类 (20)
- Hashtable与hashmap 比较
- Java中,BigDecimal互转Integer
- java文件路径的不同写法
- java web每天定时执行任务
- Java锁的种类以及辨析
- struts国际化配置
- 包含min函数的栈Java
- 使用Eclipse构建Maven项目 (step-by-step)
- 【leetcode】【153】Find Minimum in Rotated Sorted Array
- propertiesfactorybean vs propertyplaceholderconfigurer spring?
- Spring 使用注解方式进行事务管理
- JAVA代码实现MD5加密算法
- Eclipse下配置Ant脚本并自动打包带签名的Android apk
- 【leetcode】【145】Binary Tree Postorder Traversal