Java实现rar解压
Posted 大石头
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java实现rar解压相关的知识,希望对你有一定的参考价值。
jar包下载地址
https://mvnrepository.com/artifact/com.github.junrar/junrar
UnRarUtils.java
import com.github.junrar.Archive; import com.github.junrar.UnrarCallback; import com.github.junrar.exception.RarException; import com.github.junrar.rarfile.FileHeader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.math.BigInteger; import java.security.MessageDigest; import java.util.List; public class UnRarUtils { /** * @param rarFileName rar file name * @param outFilePath output file path * @param callback callback * @author shijian * @throws Exception */ public static void unrar(String rarFileName, String outFilePath, UnrarCallback callback) throws Exception { Archive archive = new Archive(new File(rarFileName), callback); if(archive == null){ throw new FileNotFoundException(rarFileName + " NOT FOUND!"); } if(archive.isEncrypted()){ throw new Exception(rarFileName + " IS ENCRYPTED!"); } List<FileHeader> files = archive.getFileHeaders(); for (FileHeader fh : files) { if(fh.isEncrypted()){ throw new Exception(rarFileName + " IS ENCRYPTED!"); } String fileName = fh.getFileNameString(); if(fileName != null && fileName.trim().length() > 0){ String saveFileName = outFilePath+ File.separator+fileName; File saveFile = new File(saveFileName); File parent = saveFile.getParentFile(); if(!parent.exists()){ parent.mkdirs(); } if(!saveFile.exists()){ saveFile.createNewFile(); } FileOutputStream fos = new FileOutputStream(saveFile); try { archive.extractFile(fh, fos); } catch (RarException e) { throw e; }finally{ try{ fos.flush(); fos.close(); }catch (Exception e){ } } } } } /** * 获取单个文件的MD5值! * @param file * @return */ public static String getFileMD5(File file) { if (!file.isFile()) { return null; } MessageDigest digest = null; FileInputStream in = null; byte buffer[] = new byte[1024]; int len; try { digest = MessageDigest.getInstance("MD5"); in = new FileInputStream(file); while ((len = in.read(buffer, 0, 1024)) != -1) { digest.update(buffer, 0, len); } in.close(); } catch (Exception e) { e.printStackTrace(); return null; } BigInteger bigInt = new BigInteger(1, digest.digest()); return bigInt.toString(16); } }
使用
UnRarUtils.unrar(rarFile.getAbsolutePath(), sdDir.getAbsolutePath(), new UnrarCallback() { int currentProgress = -1; @Override public boolean isNextVolumeReady(Volume volume) { return true; } @Override public void volumeProgressChanged(long l, long l1) { int progress = (int)((double)l/l1*100); if(currentProgress != progress){ currentProgress = progress; LogUtils.addLog(context,TAG,"Unrar "+rarFile.getName()+" rate: "+progress+"%"); } } });
以上是关于Java实现rar解压的主要内容,如果未能解决你的问题,请参考以下文章