用java解压缩rar文件 de.innosystec.unrar解压缩rar文件

用java解压缩rar文件
2009-10-23 14:11

这是利用de.innosystec.unrar解压缩rar文件.(他不支持中文和日文.下面是经本人改进后支持双字节的.同时实现了跨平台)

/**
* unRar method, extract rar file
*
* @param file_src Archive File
* @param extractPath extract Path
* @return boolean
* @exception Exception
*/
private static boolean unRar(File file_src,String extractPath) {

String os = System.getProperty(Const.getString(propertyOS)).toLowerCase();

File extractToFolder = new File(extractPath);

ReadOnlyAccessFile readOnlyAccessFile=null;
Archive archive=null;
try {

readOnlyAccessFile = new ReadOnlyAccessFile(
file_src);
archive = new Archive(readOnlyAccessFile);
final List<FileHeader> fileHeaders = archive.getFileHeaders();

int actualaSize = 0;
for (FileHeader fileHeader : fileHeaders){  

    //String fileNameString=fileHeader.getFileName();//这是英文情况
//如果是象日文和中文那样的双字节字.get filenamebyte and remove error code
byte[] filebytes=fileHeader.getFileNameByteArray();  

int endflg=0;
for(int i=0;i<filebytes.length;endflg++,i++){
if(filebytes[i]==0){
break;
}
}
//get filename
String fileNameString=new String(filebytes,0,endflg,"SJIS");    //这是日语编码.如果是中文系统就换成相应的编码.

if(os!=null && !os.startsWith("windows")){//linux,repalce "\" to "/"
fileNameString=fileNameString.replace("\\", System.getProperty("file.separator", null));
}

File unpackedFile = new File(extractToFolder, fileNameString);

File parentFolder = unpackedFile.getParentFile();

//create the parents tree
parentFolder.mkdirs();
if(Integer.toHexString(fileHeader.getUnpMethod()).equals("30")
& (Integer.toHexString(fileHeader.getUnpVersion()).equals("14"))){
actualaSize++;
}else{
FileOutputStream out=null;
try {
out = new FileOutputStream(unpackedFile);
archive.extractFile(fileHeader,out );
actualaSize++;
} catch (FileNotFoundException e) {
unpackedFile.delete();
parentFolder.delete();
}finally{
out.close();       
}

}    
}
} catch (Exception e) {    

extractToFolder.delete();
return false;

}finally{
try {
readOnlyAccessFile.close();
} catch (Exception e1) {
;
}
}  
return true;
}

你可能感兴趣的:(java,linux,windows,OS)