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

JAVA使用7-zip解压缩带密码的Zip文件(非Proccess方法)

2011-05-09 20:37 363 查看
首先到sourceforge网站下载sevenzipjbinding压缩包
我下载的版本是sevenzipjbinding-4.65-1.04-rc-extr-only-AllWindows.zip
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();
}
}
}

}s
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: