您的位置:首页 > 编程语言 > Java开发

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

2016-03-08 10:21 316 查看
之前我们写过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();
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: