JAVA利用cmd命令列呼叫WINRAR解壓及壓縮
前言
對於zip檔案,java有自帶類庫java.util.zip;可是要想解壓rar檔案只能靠第三方類庫,我試過兩個:com.github.junrar和de.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
壓縮檔案
\>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:\>