1. 程式人生 > >JAVA利用cmd命令列呼叫WINRAR解壓及壓縮

JAVA利用cmd命令列呼叫WINRAR解壓及壓縮

 

JAVA利用cmd命令列呼叫WINRAR解壓及壓縮

 

 

前言

對於zip檔案,java有自帶類庫java.util.zip;可是要想解壓rar檔案只能靠第三方類庫,我試過兩個:com.github.junrarde.innosystec.unrar,前者解壓時可能會出現crcError,後者pom配置時報錯;利用cmd命令呼叫winRAR進行解壓,無疑方便快捷很多。

呼叫cmd命令

public
 
static
 
boolean
 
exe
(String cmd) {
        Runtime runtime = Runtime.getRuntime();
        
try
 {
            Process p = runtime.exec(cmd);
            BufferedReader reader = 
new
 BufferedReader(
new
 InputStreamReader(p.getInputStream(),
"GBK"
));

            String line = reader.readLine();
            
while
(line!=
null
) {
                logger.info(line);
                line = reader.readLine();
            }
            reader.close();
            
if
(p.waitFor()!=
0
) {
                
return
 
false
;
            }
        } 
catch
 (IOException e) {
            
// TODO Auto-generated catch block
            e.printStackTrace();
        } 
catch
 (InterruptedException e) {
            
// TODO Auto-generated catch block
            e.printStackTrace();
        }
        
return
 
true
;
    }

首先利用runtime.exec()執行指令,得到process,從process.getInputStream()中獲取回顯字元並列印,列印回顯時可能會出現中文亂碼,這個和作業系統編碼有關,我這裡是GBK編碼,所以在new inputstreamReader時加入了編碼引數”GBK“

命令列字串

如果需要呼叫cmd命令,如cd等,可寫”cmd \c cd 目錄。對於直接呼叫exe執行,則可以寫成”exe檔案絕對路徑 引數,在命令列字串中,含有空格的路徑或者字串應該再加上引號,即”\”exe檔案絕對路徑\” \”引數\”“

winRAR呼叫

我這裡安裝目錄是C:/Program Files/WinRAR

,將D\1.rar 解壓到D,則寫成”\”C:/Program Files/WinRAR/unRar.exe\” x -y D:/1.rar D:/”,x代表絕對路徑解壓,-y表示全部確定;壓縮的命令如下:“\”C:/Program Files/WinRAR/rar.exe\” a -ep1 D:\2.rar D:\源目錄a表示新增檔案到壓縮檔案,-ep1表示排除基本目錄,如D\winrar\rar這個目錄,如果沒有-ep1那麼壓縮包中會出現winrar目錄路徑,而加了之後就只將當前目錄打包,只有rar目錄

 

壓縮檔案

\>Rar.exe a 111.rar 111.txt

分段壓縮檔案

D:\>Rar.exe a -v1 111.rar 111.txt

解壓檔案

D:\>Rar.exe e 111.part01.rar

 

 

 

 

 

 

winRAR命令引數

用法: rar <命令> -<開關 1> -<開關 N> <壓縮檔案> <檔案…> 
<@
列表檔案…> <解壓路徑>

<命令
a
新增檔案到壓縮檔案 
c 新增壓縮檔案註釋 
cf 新增檔案註釋 
ch 改變壓縮檔案引數 
cw 寫入壓縮檔案註釋到檔案 
d 刪除壓縮檔案中的檔案 
e 解壓壓縮檔案到當前目錄 
f 重新整理壓縮檔案中的檔案 
i[引數]=<> 在壓縮檔案中查詢字串 
k 鎖定壓縮檔案 
l[t,b] 列出壓縮檔案[技術資訊,簡潔
m[f]
移動到壓縮檔案[僅對檔案
p
列印檔案到標準輸出裝置 
r 修復壓縮檔案 
rc 重建丟失的卷 
rn 重新命名壓縮檔案 
rr[N] 新增資料恢復記錄 
rv[N] 建立恢復卷 
s[名字|-] 轉換壓縮檔案為自解壓格式或轉換回壓縮檔案 
t 測試壓縮檔案 
u 更新壓縮檔案中的檔案 
v[t,b] 詳細列出壓縮檔案[技術資訊,簡潔
x
用絕對路徑解壓檔案

<開關
-
停止掃描 
ac 壓縮或解壓後清除存檔屬性 
ad 新增壓縮檔名到目標路徑 
ag[格式] 使用當前日期生成壓縮檔名 
ai 忽略檔案屬性 
ao 新增具有壓縮屬性的檔案 
ap<格式> 新增路徑到壓縮檔案中 
as 同步壓縮檔案內容 
av 新增使用者身份校驗(僅註冊版本可用
av-
禁用使用者身份校驗 
c- 禁用註釋顯示 
cfg- 禁用讀取配置 
cl 名稱轉換為小寫 
cu 名稱轉換為大寫 
df 壓縮後刪除檔案 
dh 開啟共享檔案 
dr 刪除檔案到回收站 
ds 對固實壓縮檔案禁用名稱排序 
dw 檔案處理後清除檔案 
e[+]<屬性> 設定檔案排除和包括屬性 
ed 不新增空目錄 
en 不新增壓縮檔案結束標誌 
ep 從名稱中排除路徑 
ep1 從名稱中排除基本目錄 
ep2 展開為完整路徑 
ep3 擴充套件路徑為包含碟符的完全路徑 
f 重新整理檔案 
hp[密碼] 同時加密檔案資料和檔案頭 
id[c,d,p,q] 禁用訊息 
ieml[屬性] E-mail 傳送壓縮檔案 
ierr 傳送所有訊息到標準錯誤裝置 
ilog[名稱] 把錯誤寫到日誌檔案(只有註冊版本可用
inul
禁用所有訊息 
ioff 完成一個操作後關閉 PC 電源 
isnd 啟用聲音 
k 鎖定壓縮檔案 
kb 保留損壞的已解壓檔案 
m<0..5> 設定壓縮級別(0-儲存…3-預設…5-最大
mc<
引數> 設定高階壓縮引數 
md<大小> KB為單位的字典大小(64,128,256,512,1024,2048,4096 or A-G) 
ms[ext;ext]
指定儲存的檔案型別 
mt<執行緒> 設定執行緒數 
n<檔案> 僅包含指定的檔案 
[email protected] 從標準輸入裝置讀取檔名到包括 
[email protected]<列表> 包含在指定的列表檔案中列出的檔案 
o[+|-] 設定覆蓋模式 
oc 設定 NTFS 壓縮屬性 
or 自動重新命名檔案 
os 儲存 NTFS  
ow 儲存或恢復檔案所有者和組 
p[密碼] 設定密碼 
p- 不詢問密碼 
r 遞迴子目錄 
r- 禁用遞迴 
r0 僅遞迴萬用字元名稱的子目錄 
ri

[:] 設定優先順序(0-預設,1-最小..15-最大)和以毫秒為單位的休眠時間 
rr[N] 新增資料恢復記錄 
rv[N] 建立恢復卷 
s[,v[-],e] 建立固實壓縮檔案 
s- 禁用固實壓縮檔案 
sc[obj] 指定字符集 
sfx[名稱] 建立自解壓壓縮檔案 
st[名稱] 從標準輸入裝置讀取資料(stdin) 
sl<
大小> 處理小於指定大小的檔案 
sm<大小> 處理超過指定大小的檔案 
t 壓縮後測試檔案 
ta<日期> 新增日期 <日期> 後修改的檔案,日期格式 YYYYMMDDHHMMSS 
tb<
日期> 新增日期 <日期> 前修改的檔案,日期格式 YYYYMMDDHHMMSS 
tk
保留原始壓縮檔案時間 
tl 設定壓縮檔案時間為最新檔案時間 
tn<時間> 新增 <時間> 以後的檔案 
to<時間> 新增 <時間> 以前的檔案 
ts

 ---------------------------------------------------------

 

 

 

D:\>Rar.exe ?

 

RAR 4.01    版權 (C) 1993-2011 Alexander Roshal    28 五月 2011

共享版本         輸入 RAR -? 獲得幫助

 

用法:     rar <命令> -<開關 1> -<開關 N> <壓縮檔案> <檔案...>

               <@列表檔案...> <解壓路徑\>

 

<命令>

  a             新增檔案到壓縮檔案

  c             新增壓縮檔案註釋

  cf            新增檔案註釋

  ch            改變壓縮檔案引數

  cw            寫入壓縮檔案註釋到檔案

  d             刪除壓縮檔案中的檔案

  e             解壓壓縮檔案到當前目錄

  f             重新整理壓縮檔案中的檔案

  i[引數]=<串>  在壓縮檔案中查詢字串

  k             鎖定壓縮檔案

  l[t,b]        列出壓縮檔案[技術資訊,簡潔]

  m[f]          移動到壓縮檔案[僅對檔案]

  p             列印檔案到標準輸出裝置

  r             修復壓縮檔案

  rc            重建丟失的卷

  rn            重新命名壓縮檔案

  rr[N]         新增資料恢復記錄

  rv[N]         建立恢復卷

  s[名字|-]     轉換壓縮檔案為自解壓格式或轉換回壓縮檔案

  t             測試壓縮檔案

  u             更新壓縮檔案中的檔案

  v[t,b]        詳細列出壓縮檔案[技術資訊,簡潔]

  x             用絕對路徑解壓檔案

 

<開關>

  -             停止掃描

  ac            壓縮或解壓後清除存檔屬性

  ad            新增壓縮檔名到目標路徑

  ag[格式]      使用當前日期生成壓縮檔名

  ai            忽略檔案屬性

  ao            新增具有壓縮屬性的檔案

  ap<格式>      新增路徑到壓縮檔案中

  as            同步壓縮檔案內容

  av            新增使用者身份校驗(僅註冊版本可用)

  av-           禁用使用者身份校驗

  c-            禁用註釋顯示

  cfg-          禁用讀取配置

  cl            名稱轉換為小寫

  cu            名稱轉換為大寫

  df            壓縮後刪除檔案

  dh            開啟共享檔案

  dr            刪除檔案到回收站

  ds            對固實壓縮檔案禁用名稱排序

  dw            檔案處理後清除檔案

  e[+]<屬性>    設定檔案排除和包括屬性

  ed            不新增空目錄

  en            不新增"壓縮檔案結束"標誌

  ep            從名稱中排除路徑

  ep1           從名稱中排除基本目錄

  ep2           展開為完整路徑

  ep3           擴充套件路徑為包含碟符的完全路徑

  f             重新整理檔案

  hp[密碼]      同時加密檔案資料和檔案頭

  id[c,d,p,q]   禁用訊息

  ieml[屬性]    用 E-mail 傳送壓縮檔案

  ierr          傳送所有訊息到標準錯誤裝置

  ilog[名稱]    把錯誤寫到日誌檔案(只有註冊版本可用)

  inul          禁用所有訊息

  ioff          完成一個操作後關閉 PC 電源

  isnd          啟用聲音

  k             鎖定壓縮檔案

  kb            保留損壞的已解壓檔案

  m<0..5>       設定壓縮級別(0-儲存...3-預設...5-最大)

  mc<引數>      設定高階壓縮引數

  md<大小>      以KB為單位的字典大小(64,128,256,512,1024,2048,4096 or A-G)

  ms[ext;ext]   指定儲存的檔案型別

  mt<執行緒>      設定執行緒數

  n<檔案>       僅包含指定的檔案

  [email protected]            從標準輸入裝置讀取檔名到包括

  [email protected]<列表>      包含在指定的列表檔案中列出的檔案

  o[+|-]        設定覆蓋模式

  oc            設定 NTFS 壓縮屬性

  or            自動重新命名檔案

  os            儲存 NTFS 流

  ow            儲存或恢復檔案所有者和組

  p[密碼]       設定密碼

  p-            不詢問密碼

  r             遞迴子目錄

  r-            禁用遞迴

  r0            僅遞迴萬用字元名稱的子目錄

  ri<P>[:<S>]   設定優先順序(0-預設,1-最小..15-最大)和以毫秒為單位的休眠時間

  rr[N]         新增資料恢復記錄

  rv[N]         建立恢復卷

  s[<N>,v[-],e] 建立固實壓縮檔案

  s-            禁用固實壓縮檔案

  sc<chr>[obj]  指定字符集

  sfx[名稱]     建立自解壓壓縮檔案

  st[名稱]      從標準輸入裝置讀取資料(stdin)

  sl<大小>      處理小於指定大小的檔案

  sm<大小>      處理超過指定大小的檔案

  t             壓縮後測試檔案

  ta<日期>      新增日期 <日期> 後修改的檔案,日期格式 YYYYMMDDHHMMSS

  tb<日期>      新增日期 <日期> 前修改的檔案,日期格式 YYYYMMDDHHMMSS

  tk            保留原始壓縮檔案時間

  tl            設定壓縮檔案時間為最新檔案時間

  tn<時間>      新增 <時間> 以後的檔案

  to<時間>      新增 <時間> 以前的檔案

  ts<m,c,a>[N]  儲存或恢復檔案時間(修改,建立,訪問)

  u             更新檔案

  v             自動檢測建立卷的大小或者列出所有的卷

  v<大小>[k,b]  建立卷大小=<大小>*1000 [*1024, *1]

  vd            建立容量前清除磁碟內容

  ver[n]        檔案版本控制

  vn            使用舊風格的卷命名方案

  vp            每卷之前暫停

  w<路徑>       指定工作目錄

  x<檔案>       排除指定的檔案

  [email protected]            從標準輸入裝置讀取要排除的檔名

  [email protected]<列表>       排除在指定的列表檔案中列出的檔案

  y             假設對全部詢問都回答是

  z[檔案]       從檔案讀取壓縮檔案註釋

 

D:\>