java調用7zip解壓壓縮包的實例
前言
最近的項目中需要用到解壓縮包的功能,客戶給出的壓縮包的格式主要是rar和zip,因此就打算使用java調用7zip的命令行進行解壓文件,本文主要記錄一下實現的過程以及其中遇到的問題。
7zip命令行
7z <command> [<switches>...] <archive_name> [<file_names>...][<@listfiles...>]
7z的commands中包含添加文件到壓縮包、從壓縮包中刪除文件以及提取文件等等多個命令,在這里我就不多贅述,有興趣的可以在7zip的安裝目錄使用cmd運行7z.exe查看具體的命令。
今天我們要做的就是使用密碼將壓縮包中的文件提取出來,具體的命令如下:
7z x 壓縮文件源路徑 -o要解壓的路徑 -aoa -bse1 -p密碼
• x : 表示從壓縮包中提取文件
• -aoa : ao表示覆蓋模式,最后的a表示直接覆蓋現有文件而不需要任何提示
• -bs < o|e|p > < 0|1|2 >:set output stream for output/error/progress line
-bs命令其實我沒有太明白,字面的意思大概是說為輸出/錯誤/進程行設置輸出流,如果不設置-bse1屬性,當解壓縮出現錯誤,例如文件找不到時,錯誤提示就會出現在cmd窗口中而不是生成的log文件中,因此必須加上-bse1命令
java通過cmd調用7zip解壓
String filePath = "F:\\test\\新建 文本 文檔.rar";
//將文件名稱中的所有空格都替換為帶有雙引號的空格
filePath = filePath.replaceAll(" ", "\" \"");
String command = "cmd /c start /B D:/工具/7zip/7-Zip/7z.exe x "+filePath+" -oF:/test/ -aoa -bse1 -p123 >F:/test/1.txt";
System.out.println(command);
Runtime.getRuntime().exec(command);
cmd命令解釋
• cmd /c start 7z.exe 表示會啟動7z來執(zhí)行后面的命令,7z啟動以后原來的cmd窗口會關閉
• cmd /k start 7z.exe 表示會啟動7z來執(zhí)行后面的命令,7z啟動以后原來的cmd窗口不會關閉
• /B 表示啟動應用程序,但是并不創(chuàng)建新的窗口
通過以上的代碼就可以解壓完成壓縮包文件,如果要知道解壓的密碼是否正確或者壓縮包是否損壞等信息,可以通過獲取生成txt日志文件的內容來得知,這個不在本篇范圍之后,后續(xù)再說。
遇到的問題
7z.exe文件路徑找不到
出現該問題是由于7zip的安裝路徑中存在空格
解決方案:
• 選擇7zip安裝路徑,不要安裝在有空格的路徑中
• 將路徑中的空格使用雙引號引起來,如C:“Program Files”\7-Zip或者“C:\Program Files\7-Zip”或者C:\Program“ ”Files\7-Zip
文件路徑中存在連續(xù)多個空格導致文件找不到
出現該問題是由于
Runtime.getRuntime().exec(command)
方法在執(zhí)行過程中,會將文件路徑中的多個連續(xù)空格轉換為單個空格,這種情況在文件全路徑外面加上雙引號也是不管用的
解決方案:
• 替換文件路徑中的空格,將每一個空格都替換為帶有雙引號的空格即可
以上這篇java調用7zip解壓壓縮包的實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
解決Lombok使用@Builder無法build父類屬性的問題
這篇文章主要介紹了解決Lombok使用@Builder無法build父類屬性的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09
Spring的Bean注入解析結果BeanDefinition詳解
這篇文章主要介紹了Spring的Bean注入解析結果BeanDefinition詳解,BeanDefinition描述了一個bean實例,擁有屬性值、構造參數值和具體實現的其他信息,其是一個bean的元數據,xml中配置的bean元素會被解析成BeanDefinition對象,需要的朋友可以參考下2023-12-12
SpringBoot源碼分析之bootstrap.properties文件加載的原理
本文通過訪問看到bootstrap.properties中的信息獲取到了,同時age也被application.properties中的屬性覆蓋掉了。加載順序到底是什么?為什么會覆蓋呢?我們接下來分析下吧2021-12-12

