解壓RAR5

以下內(nèi)容來自《WinRAR.chm》"RAR5"

是 WinRAR 5.0 引入的最新版本的 RAR 格式惋砂。它包含很多重要的修改妒挎,如 AES-256 加密、更有效的恢復(fù)記錄西饵、更大的字典大小酝掩,較老的軟件,包括老版本的 WinRAR眷柔,不能解壓 RAR 5.0 壓縮文件期虾。所以如果你計(jì)劃把一個壓縮文件發(fā)送給其他人原朝,選擇 RAR5 需要考慮兼容性問題。

RAR5加密算法并未公布镶苞,所以很多開源工具包都只支持rar4喳坠,在解壓rar5格式時,會報出不支持rar5格式的錯誤茂蚓,比如常用的junara

PLAN A

經(jīng)過仔細(xì)的翻閱Google壕鹉,找到了這個: http://sevenzipjbind.sourceforge.net/

7-Zip-JBinding is a java wrapper for 7-Zip C++ library. It allows extraction of many archive formats using a very fast native library directly from java through JNI. Features:

簡而言之,7-Zip-JBinding 是一個c++版7-Zip的封裝聋涨,就和在你本地安裝了7-Zip是類似的效果晾浴,通過jni交互。

官網(wǎng)有更詳細(xì)的介紹牍白,和一些簡單的例子:


<dependency>
    <groupId>net.sf.sevenzipjbinding</groupId>
    <artifactId>sevenzipjbinding</artifactId>
    <version>16.02-2.01</version>
</dependency>
<dependency>
    <groupId>net.sf.sevenzipjbinding</groupId>
    <artifactId>sevenzipjbinding-all-platforms</artifactId>
    <version>16.02-2.01</version>
</dependency>


private int getNumberOfItemsInArchive(String archiveFile) throws Exception {
    IInArchive archive;
    RandomAccessFile randomAccessFile;

    randomAccessFile = new RandomAccessFile(archiveFile, "r");

    archive = SevenZip.openInArchive(ArchiveFormat.ZIP, // null - autodetect
            new RandomAccessFileInStream(randomAccessFile));

    int numberOfItems = archive.getNumberOfItems();

    archive.close();
    randomAccessFile.close();

    return numberOfItems;
}

經(jīng)過實(shí)測脊凰,這種方式是可以實(shí)現(xiàn)解壓rar5的,但是還有一些問題茂腥,由于文件編碼問題狸涌,可能會出現(xiàn)解壓出的文件存在亂碼的情況。這種情況暫時不知道怎么處理最岗,API上沒有相關(guān)參數(shù)可以指定文件編碼

PLAN B

既然RAR5沒公布算法帕胆,那我們就自己破解,肝出來仑性!

......

開個玩笑

緊接著我換了一種思路惶楼,代碼不行,工具來湊诊杆,找到了這個: http://www.rarlab.com

Welcome to RARLAB, home of WinRAR and RAR archivers

這個描述就很舒服

支持windows歼捐、linux、mac(我在mac用的就是這個命令晨汹,當(dāng)時找了好幾個解壓rar的軟件都要付費(fèi)豹储,索性brew install rar)

我們可以在代碼里調(diào)用系統(tǒng)腳本,來達(dá)到解壓rar的目的

先來安裝一下

uname -a 
# 根據(jù)系統(tǒng)位數(shù)選擇對應(yīng)的包
wget https://www.rarlab.com/rar/rarlinux-x64-6.0.2b1.tar.gz
# wget https://www.rarlab.com/rar/rarlinux-6.0.2b1.tar.gz
tar -zxvf rarlinux-x64-6.0.2b1.tar.gz
cd rar
make & make install

如果你沒有權(quán)限的話淘这,可以找運(yùn)維同學(xué)幫助

public class UnrarUtils {
    private static final Logger LOG = LoggerFactory.getLogger(UnrarUtils.class);
    private static final String UNRAR_CMD = "unrar x ";
    /**
     * 將1個RAR文件解壓
     * rarFileName 需要解壓的RAR文件(必須包含路徑信息以及后綴)
     * destDir 解壓后的文件放置目錄
     */
    public static String unRARFile(String filepath) {
        String name = filepath.substring(0, filepath.lastIndexOf('.'));
        File targetDir = new File(name);
        if (!targetDir.exists()) {
            targetDir.mkdirs();
        }
        String cmd = UNRAR_CMD + filepath + " " + name;
        try {
            Runtime rt = Runtime.getRuntime();
            Process process = rt.exec(cmd);
            int retCode = process.waitFor();
            if (retCode == 0) {
                LOG.info("解壓完畢");
                return name;
            }
        } catch (Exception e) {
            LOG.warn("解壓rar文件失敗:{}", JSONObject.toJSONString(e));
        }
        return name;
    }
}

注意:process.waitFor() 會阻塞主線程剥扣,同時新開一個子線程去執(zhí)行任務(wù),如果任務(wù)耗時的話铝穷, 可能會引起一些其他的問題钠怯。

當(dāng)然本例中,waitFor的作用是曙聂,等待解壓完畢晦炊,會去讀取目錄下的文件,如果不等它的話,就讀不到你想要的文件了断国。

以上就是本次全部內(nèi)容了贤姆,感謝閱讀。

本文由博客一文多發(fā)平臺 OpenWrite 發(fā)布稳衬!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末霞捡,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子薄疚,更是在濱河造成了極大的恐慌碧信,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件输涕,死亡現(xiàn)場離奇詭異音婶,居然都是意外死亡慨畸,警方通過查閱死者的電腦和手機(jī)莱坎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來寸士,“玉大人檐什,你說我怎么就攤上這事∪蹩ǎ” “怎么了乃正?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長婶博。 經(jīng)常有香客問我瓮具,道長,這世上最難降的妖魔是什么凡人? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任名党,我火速辦了婚禮,結(jié)果婚禮上挠轴,老公的妹妹穿的比我還像新娘传睹。我一直安慰自己,他們只是感情好岸晦,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布欧啤。 她就那樣靜靜地躺著,像睡著了一般启上。 火紅的嫁衣襯著肌膚如雪邢隧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天冈在,我揣著相機(jī)與錄音倒慧,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛迫靖,可吹牛的內(nèi)容都是我干的院峡。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼系宜,長吁一口氣:“原來是場噩夢啊……” “哼照激!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起盹牧,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤俩垃,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后汰寓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體口柳,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年有滑,在試婚紗的時候發(fā)現(xiàn)自己被綠了跃闹。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡毛好,死狀恐怖望艺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情肌访,我是刑警寧澤找默,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站吼驶,受9級特大地震影響惩激,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蟹演,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一风钻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧轨帜,春花似錦魄咕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至苟弛,卻和暖如春喝滞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背膏秫。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工右遭, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓窘哈,卻偏偏與公主長得像吹榴,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子滚婉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Win 平臺推薦 360壓縮安全無毒图筹,無廣告彈窗https://yasuo.#/[https://yas...
    acc8226閱讀 5,646評論 0 1
  • Python 本身不支持 rar 文件的解壓,需要先安裝相關(guān)依賴才可使用 安裝 unrar 模塊:pip inst...
    viioo閱讀 588評論 0 0
  • 前言 最近由于項(xiàng)目需要让腹,需要我諒解一下關(guān)于在移動平臺的解壓功能远剩,在移動平臺解壓,我個人感覺是沒有太大必要的骇窍,畢竟手...
    NKming閱讀 20,244評論 27 65
  • 表情是什么瓜晤,我認(rèn)為表情就是表現(xiàn)出來的情緒。表情可以傳達(dá)很多信息腹纳。高興了當(dāng)然就笑了痢掠,難過就哭了。兩者是相互影響密不可...
    Persistenc_6aea閱讀 124,435評論 2 7
  • 16宿命:用概率思維提高你的勝算 以前的我是風(fēng)險厭惡者只估,不喜歡去冒險志群,但是人生放棄了冒險,也就放棄了無數(shù)的可能蛔钙。 ...
    yichen大刀閱讀 6,038評論 0 4