導航:首頁 > 文件處理 > java解壓縮文件

java解壓縮文件

發布時間:2022-02-10 23:28:58

1. 關於java壓縮文件(rar或者zip),壓縮的文件是按文件的原目錄來壓縮的,並不是在同一個文件夾中。

NTFS是WinNT以上版本支持的一種提供安全性、可靠性的高級文件系統。在Windows2000和WindowsXP中,NTFS還可以提供諸如文件和文件夾許可權、加密、磁碟配額和壓縮這樣的高級功能。

一、加密文件或文件夾

步驟一:打開Windows資源管理器。

步驟二:右鍵單擊要加密的文件或文件夾,然後單擊「屬性」。

步驟三:在「常規」選項卡上,單擊「高級」。選中「加密內容以便保護數據」復選框

在加密過程中還要注意以下五點:

1.要打開「Windows 資源管理器」,請單擊「開始→程序→附件」,然後單擊「Windows 資源管理器」。

2.只可以加密NTFS分區卷上的文件和文件夾,FAT分區卷上的文件和文件夾無效。

3.被壓縮的文件或文件夾也可以加密。如果要加密一個壓縮文件或文件夾,則該文件或文件夾將會被解壓

4.無法加密標記為「系統」屬性的文件,並且位於systemroot目錄結構中的文件也無法加密。

5.在加密文件夾時,系統將詢問是否要同時加密它的子文件夾。如果選擇是,那它的子文件夾也會被加密,以後所有添加進文件夾中的文件和子文件夾都將在添加時自動加密。

二、解密文件或文件夾

步驟一:打開Windows資源管理器。

步驟二:右鍵單擊加密文件或文件夾,然後單擊「屬性」。

步驟三:在「常規」選項卡上,單擊「高級」。

步驟四:清除「加密內容以便保護數據」復選框。

同樣,我們在使用解密過程中要注意以下問題:

1.要打開「Windows資源管理器」,請單擊「開始→程序→附件」,然後單擊「Windows資源管理器」。

2.在對文件夾解密時,系統將詢問是否要同時將文件夾內的所有文件和子文件夾解密。如果選擇僅解密文件夾,則在要解密文件夾中的加密文件和子文件夾仍保持加密。但是,在已解密文件夾內創立的新文件和文件夾將不會被自動加密。

以上就是使用文件加、解密的方法!而在使用過程中我們也許會遇到以下一些問題,在此作以下說明:

1.高級按鈕不能用

原因:加密文件系統(EFS)只能處理NTFS文件系統卷上的文件和文件夾。如果試圖加密的文件或文件夾在FAT或FAT32卷上,則高級按鈕不會出現在該文件或文件夾的屬性中。

解決方案:

將卷轉換成帶轉換實用程序的NTFS卷。

打開命令提示符。鍵入:

Convert [drive]/fs:ntfs

(drive 是目標驅動器的驅動器號)

2.當打開加密文件時,顯示「拒絕訪問」消息

原因:加密文件系統(EFS)使用公鑰證書對文件加密,與該證書相關的私鑰在本計算機上不可用。

解決方案:

查找合適的證書的私鑰,並使用證書管理單元將私鑰導入計算機並在本機上使用。

3.用戶基於NTFS對文件加密,重裝系統後加密文件無法被訪問的問題的解決方案(注意:重裝Win2000/XP前一定要備份加密用戶的證書):

步驟一:以加密用戶登錄計算機。

步驟二:單擊「開始→運行」,鍵入「mmc」,然後單擊「確定」。

步驟三:在「控制台」菜單上,單擊「添加/刪除管理單元」,然後單擊「添加」。

步驟四:在「單獨管理單元」下,單擊「證書」,然後單擊「添加」。

步驟五:單擊「我的用戶賬戶」,然後單擊「完成」(如圖2,如果你加密用戶不是管理員就不會出現這個窗口,直接到下一步) 。

步驟六:單擊「關閉」,然後單擊「確定」。

步驟七:雙擊「證書——當前用戶」,雙擊「個人」,然後雙擊「證書」。

步驟八:單擊「預期目的」欄中顯示「加密文件」字樣的證書。

步驟九:右鍵單擊該證書,指向「所有任務」,然後單擊「導出」。

步驟十:按照證書導出向導的指示將證書及相關的私鑰以PFX文件格式導出(注意:推薦使用「導出私鑰」方式導出,這樣可以保證證書受密碼保護,以防別人盜用。另外,證書只能保存到你有讀寫許可權的目錄下)。

4.保存好證書

注意將PFX文件保存好。以後重裝系統之後無論在哪個用戶下只要雙擊這個證書文件,導入這個私人證書就可以訪問NTFS系統下由該證書的原用戶加密的文件夾(注意:使用備份恢復功能備份的NTFS分區上的加密文件夾是不能恢復到非NTFS分區的)。

最後要提一下,這個證書還可以實現下述用途:

(1)給予不同用戶訪問加密文件夾的許可權

將我的證書按「導出私鑰」方式導出,將該證書發給需要訪問這個文件夾的本機其他用戶。然後由他登錄,導入該證書,實現對這個文件夾的訪問。

(2)在其也WinXP機器上對用「備份恢復」程序備份的以前的加密文件夾的恢復訪問許可權

將加密文件夾用「備份恢復」程序備份,然後把生成的Backup.bkf連同這個證書拷貝到另外一台WinXP機器上,用「備份恢復」程序將它恢復出來(注意:只能恢復到NTFS分區)。然後導入證書,即可訪問恢復出來的文件了。

WindowsXP中的文件加密功能及其使用

作者:lvvl 來源:賽迪網安全社區

Windows XP文件加密功能強大並且簡單易用,因而許多用戶都使用它來保護自己的重要文件。但由於大部分用戶對該功能了解不足,在使用過程中經常出現問題,在本刊「電腦醫院」中我們也頻繁地收到讀者的求助信,為此,CHIP在這里將特意為您詳細介紹有關該功能的使用技巧。

微軟在Windows2000中內建了文件加密功能,該功能後來被移植到WinXP中。使用該功能,我們只需簡單地單擊幾下滑鼠就可以將指定的文件或者文件夾進行加密,而且在加密後我們依然可以和沒加密前一樣方便地訪問和使用它們,非常方便。而且加密後即使黑客侵入系統,完全掌握了文件的存取權,依然無法讀取這些文件與文件夾。

但簡單強大的文件加密功能也給許多用戶帶來了困擾。由於使用簡單,許多用戶都樂於使用它來保護自己的重要文件,但大部分用戶由於缺乏對該功能的真正了解,在使用時泄密、無法解密等問題頻繁發生,恰恰被加密的文件往往是重要的文件,影響非常大。為此,筆者特意整理了有關該功能的一些相關知識和使用技巧與您分享。

加密和解密文件與文件夾

Windows2000系列和WinXP專業版及Windows2003的用戶都可使用內建的文件加密功能,但前提是准備加密的文件與文件夾所在的磁碟必須採用NTFS文件系統。同時要注意,由於加密解密功能在啟動時還不能夠起作用,因此系統文件或在系統目錄中的文件是不能被加密的,如果操作系統安裝目錄中的文件被加密了,系統就無法啟動。另外,NTFS文件系統還提供一種壓縮後用戶可以和沒壓縮前一樣方便訪問文件與文件夾的文件壓縮功能,但該功能不能與文件加密功能同時使用,使用ZIP、RAR等其他壓縮軟體壓縮的文件不在此限。

加密時,只需使用滑鼠右鍵單擊要加密的文件或者文件夾,然後選擇「屬性」,在「屬性」對話框的「常規」選項卡上單擊「高級」按鈕,在「高級屬性」對話框上選中「加密內容以保護數據」復選框並確認即可對文件進行加密,如果加密的是文件夾,系統將進一步彈出「確認屬性更改」對話框要求您確認是加密選中的文件夾,還是加密選中的文件夾、子文件夾以及其中的文件。而解密的步驟與加密相反,您只需在「高級屬性」對話框中清除「加密內容以保護數據」復選框上的選中標記即可(如圖1),而在解密文件夾時將同樣彈出「確認屬性更改」對話框要求您確認解密操作應用的范圍。

圖1

加密後,用戶可以像使用普通文件一樣直接打開和編輯,又或者執行復制、粘貼等操作,而且用戶在加密文件夾內創建的新文件或從其他文件夾拷貝過來的文件都將自動被加密。被加密的文件和文件夾的名稱將默認顯示為淡綠色,如您的電腦上被加密的文件和文件夾的名稱不是彩色顯示,您可以單擊「我的電腦|工具|文件夾選項」,然後在「文件夾選項」對話框中單擊「查看」選項卡,選中「以彩色顯示加密或壓縮的NTFS文件」復選框即可。

賦予或撤銷其他用戶的許可權

如果需要,您可賦予其他用戶對加密文件的完全訪問許可權,但要明白,Windows所採用的是基於密鑰的加密方案,並且是在用戶第一次使用該功能時才為用戶創建用於加密的密鑰,因此您准備賦予許可權的用戶也必須曾經使用過系統的加密功能,否則將無法成功賦予對方許可權。Windows內建的文件加密功能只允許賦予其他用戶訪問加密文件的完全許可權,而不允許將加密文件夾的許可權賦予給其他用戶。
要賦予或撤銷其他用戶對加密文件的訪問許可權,可用滑鼠右鍵單擊已加密的文件,選擇「屬性」,在「屬性」對話框的「常規」選項卡上單擊「高級」按鈕,在「高級屬性」對話框中單擊「詳細信息」按鈕,即可通過「添加」和「刪除」按鈕添加或刪除其他可以訪問該文件的用戶。

備份密鑰

有許多讀者在系統發生故障或重新安裝系統以後,無法再訪問之前他們加密過的文件與文件夾而向本刊「電腦醫院」求助。但此時為時已晚,Windows內建的加密功能與用戶的賬戶關系非常密切,同時用於解密的用戶密鑰也存儲在系統內,任何導致用戶賬戶改變的操作和故障都有可能帶來災難,要避免這種情況的發生,您必須未雨綢繆,在使用加密功能後馬上備份加密密鑰。

備份密鑰的操作並不復雜,您只需單擊「開始|運行」,鍵入「certmgr.msc」打開證書管理器,在左邊窗口中依次單擊控制台,打開「證書-當前用戶」下的「個人」中的「證書」,然後在右邊窗口中用滑鼠右鍵單擊「預期目的」是「加密文件系統」的證書,指向「所有任務|導出」,系統將打開「證書導出向導」指引您進行操作,向導將詢問您是否需要導出私鑰,您應該選擇「導出私鑰」,並按照向導的要求輸入密碼保護導出的私鑰,然後選擇存儲導出後文件的位置即可完成。

建議您將導出的證書存儲在系統盤以外的其他磁碟上,以避免在使用磁碟鏡像之類的軟體恢復系統時將備份的證書覆蓋掉。備份後,當加密文件的賬戶出現問題或重新安裝了系統後需要訪問或解密以前加密的文件時,您只需要使用滑鼠右鍵單擊備份的證書,選擇「安裝PFX」,系統將彈出「證書導入向導」指引您的操作,您只需要鍵入當初導出證書時輸入用於保護備份證書的密碼,然後選擇讓向導「根據證書類型,自動選擇證書存儲區」即可完成,完成後就可以訪問以前的加密文件了。

指定恢復代理

如果您同時使用多個賬戶或者與其他用戶共用一台電腦,擔心更換賬戶或者其他賬戶加密的文件出問題,那麼您可以考慮指定一個文件故障恢復代理,恢復代理可以解密系統內所有通過內建加密功能加密的文件,一般用於網路管理員在網路上處理文件故障,並能使管理員在職員離職後解密職員加密的工作資料。在Win2000中,默認Administrator為恢復代理,而在WinXP上,如果需要恢復代理則必須自行指定。但需要注意,恢復代理只能夠解密指定恢復代理後被加密的文件,所以您應該在所有人開始使用加密功能前先指定恢復代理。

如果您所使用的電腦是企業網路中的,那麼您需要聯系管理員查詢是否已經制定了故障恢復策略,而如果您只是在使用一台單獨的電腦,那麼您可以按照下面的步驟指定恢復代理。首先,您需要使用准備指定為恢復代理的用戶賬戶登錄,申請一份故障恢復證書,該用戶必須是管理員或者擁有管理員許可權的管理組成員。對於企業網路上的電腦,登錄後可以通過上面介紹過的「證書管理器」,在「使用任務」中的「申請新證書」中向伺服器申請。而在個人電腦上,您必須單擊「開始|附件|命令提示符」,在命令行窗口中鍵入「cipher /r:c:\efs.txt」(efs.txt可以是任一文件),命令行窗口將提示您輸入保護證書的密碼並生成我們需要的證書。生成的證書一個是PFX文件,一個是CER文件,先使用滑鼠右鍵單擊PFX文件,選擇「安裝PFX」,通過彈出的「證書導入向導」選擇「根據證書類型,自動選擇證書存儲區」 導入證書。

接下來再單擊「開始|運行」,鍵入「gpedit.msc」打開組策略編輯器,在左邊控制台上依次單擊「本地計算機策略|計算機配置|Windows 設置|安全設置|公鑰策略|加密文件系統」,然後在右邊窗口中用滑鼠右鍵單擊選擇「添加數據恢復代理」(如圖2),然後在彈出的「添加數據恢復代理向導」中瀏覽並選擇剛才生成的證書中的CER文件,在鍵入保護證書的密碼後,向導將導入證書,完成指定恢復代理的工作。完成後,在以後需要的時候,只需使用被指定為恢復代理的賬戶登錄,就可以解密系統內所有在指定恢復代理後被加密的文件。

圖2

禁止加密功能

在多用戶共用電腦的環境下,我們往往通過將其他用戶指定為普通用戶許可權,限制他們使用某些功能,但由於普通用戶賬戶默認允許使用加密功能,因此在一些多用戶共用的電腦上經常會帶來一些困擾。如果擔心電腦上其他用戶亂加密磁碟上的文件,您可以設置特定的文件夾禁止被加密,也可以完全禁止文件加密功能。

如果您希望將某個文件夾設置為禁止加密,可以編輯一個文本文件,內容包括「[Encryption]」和「Disable=1」兩行,然後命名為「Desktop.ini」,將其放到不希望被加密的文件夾中即可。當其他用戶試圖加密該文件夾時,系統將提示用戶該文件夾加密功能被禁止。但需要注意,您只能使用這種方法禁止其他用戶加密該文件夾,文件夾中的子文件夾將不受保護。

如果需要,您也可以完全禁止文件加密功能,在Win2000中,只需使用Administrator登錄並運行「secpol.msc」打開策略編輯器,用滑鼠右鍵單擊左邊控制台上的「安全設置|公鑰策略|加密文件系統」,選擇「屬性」,在屬性對話框上清除「允許用戶使用文件加密系統(EFS)來加密文件」復選框上的選中標記,然後重新啟動電腦即可。而在WinXP上雖然也有相應的選項,但實際上並不能夠起作用,您需要通過編輯注冊表來禁止文件加密功能。首先單擊「開始|運行」,鍵入「regedit.exe」打開注冊表編輯器,依次單擊 「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ Windows NT\CurrentVersion\EFS」,再用滑鼠右鍵單擊建立一個「DWORD」值,雙擊新建的值並賦值為「1」,關閉注冊表後重新啟動電腦。這樣,當其他用戶試圖使用文件加密功能時,系統將提示加密功能已被禁止(如圖3)。

圖3

防止泄密

由於對文件加密功能缺乏了解,許多讀者對該功能是否能夠真正發揮作用抱有懷疑態度,而另外一些用戶卻又因為過分地放心而導致泄密事件頻繁發生。首先,對於該功能的加密效果您大可放心,不必因為在您使用加密文件時不需要輸入密碼而懷疑加密效果,在加密後能夠透明地使用恰恰正是該功能的優點。雖然有一些第三方軟體曾經成功地破解使用該功能加密的文件,但這種軟體暫時對於Windows XP是無效的,而且即使在其他版本的Windows 操作系統上,也是可以避免的。

但您需要小心由於自己的失誤引起加密失效,也需要了解該功能的特點。Windows XP內建的文件加密功能與用戶的賬戶是聯系在一起的,換言之,如果您的Windows賬戶沒有保護好,密碼被其他人獲得,那麼對方也就可以像您一樣登錄系統訪問加密的文件。另外,當已加密的文件被拷貝或者移動到非NTFS文件系統磁碟上時,文件將被解密。在文件通過網路傳輸時,也是以明文方式進行傳輸的。這些您都需要清楚,避免錯誤操作引起泄密。而最主要的是加密後的文件並不是絕對安全的,雖然可以確保不被讀取,但卻無法避免被刪除。

此外,在加密文件的過程中,系統將把原來的文件存儲到緩沖區,然後在加密後將原文件刪除。這些被刪除掉的文件在系統上並不是不可能恢復的,通過磁碟文件恢復工具很有可能被恢復過來而造成泄密,此時您需要考慮通過其他磁碟安全工具,或者使用系統內建的「cipher」命令對磁碟上的已刪除文件進行清除,具體的步驟是,單擊「開始|附件|命令提示符」,在命令行窗口中鍵入「cipher /w C:\foldername」即可清除C盤foldername文件夾中已刪除文件殘留的碎片,如果不輸入文件夾名稱則將對整個磁碟進行清理。

疑難排解

當您的Windows登錄賬戶變更而無法訪問已加密的文件時,由於用戶的賬戶名稱或者密碼變更時將無法與原來的加密證書聯繫上,因而您需要考慮是否在使用其他賬戶時更改了當前賬戶的名稱或者密碼?又或者是管理員進行了這樣的操作?如果的確如此,您可以嘗試將自己的賬戶名稱和密碼更改成原來的,問題應該能夠解決。但需要注意,根據微軟的說法,改回賬戶名稱與密碼的方法在管理員賬戶上可能無效,而且如果您的賬戶並不是改變而是被刪除後重建,也就是說是一個全新的賬戶,那麼您只能夠求助於恢復代理或者導入備份的證書。

如果您已經重新格式化了硬碟、重新安裝了系統又或者使用尚未加密文件時的系統盤鏡像恢復了系統而導致無法訪問加密文件,那麼您只能夠通過導入自己的證書或者恢復代理的方法來解決問題,這時基本上已經沒有其他方法可以幫助您取迴文件。另外,Windows XP SP1版後使用了新的加密演算法,如果您加密時使用的是Windows XP SP1版本,那麼當您嘗試挽救數據時也應該使用該版本,或者未來的更新版本,否則在其他版本上亂試,加密文件可能會損毀。

系統安全 深入理解加密文件系統EFS

微軟在NTFS4.0及後續版本的文件系統中,捆綁了兩個功能強大的工具:壓縮文件系統和加密文件系統。這個選項在文件夾的屬性-高級裡面。是一個單選框。壓縮文件系統在這里就不多提了,不過有一點,可能有心的朋友注意得到,就是這兩個選項不可以同時選。這個原因很簡單,因為不論是加密文件還是壓縮文件,我們都是在改變文件,我們通過改變他們的讀碼框架來加密或者壓縮文件。這里可能有人要問,WinRAR為什麼可以及加密文件又壓縮文件。其實WinRAR加密的方法是在基於WinRAR這個文件壓縮系統,而不是基於文件本身。我們還是言歸正傳。

這裡面要提到的一點叫做加密方式。相信有些朋友對Alice和Bob這兩個名字非常熟悉,這兩個名字最早用於IBM出版的一本圖書中,用來解釋對稱加密和非對稱加密。對稱加密,簡單一點說就是加密所使用的密碼和解密所使用的密碼是同一個密碼。非對稱呢,加密使用的和解密是不同的密碼。這個不同的密碼,一個被稱為私鑰,另一個就是公鑰。從名字上面可以看出來,私鑰,是無論如何不會公開的,公鑰,則是發布出去的。

詳細解釋一下,熟悉非對稱加密的朋友可以跳過這一段。e.g.Alice要發送一份敏感數據給BOB,顯然需要加密。非對稱加密,使用兩個不同的密碼加密和解密。就是說,如果alice的公鑰和私鑰為一組密碼,分別是alice的公鑰和alice的私鑰。那麼,用alice公鑰加密的東西只有使用alice的私鑰可以解密,對應的,如果使用alice公鑰加密的東西,只有alice的私鑰可以解開。那麼對於bob也是一樣。如果我們採用對稱加密的方法,也就是加密和解密的過程使用的是一個密碼,那麼這個密碼是無論如何不能被第三方截獲的。互聯網路,可以截獲;電話,可以監聽;甚至當面交換,都可以被竊聽。所以這是對稱加密的一個重大缺陷。如果採用非對稱加密,alice和bob都不公開自己的私鑰,然後他們在交換信息前,互相交換公鑰。這樣,alice使用bob的公鑰加密alice要給bob的文件,這個使用bob公鑰加密過的文件,僅有bob的私鑰可以解開。而bob從來沒有公開過他的私鑰,所以,我們看到,這樣的加密,是安全的。這個信息加密解密,交換公鑰的過程,就是非對稱加密。

解釋過非對稱加密,我們也可以簡單的比較出兩者在安全性上的優越性。不過非對稱加密一個重要的缺陷,就是運算時間很長,對稱加密在工作效率上可能是非對稱加密的100-1000倍。所以微軟也是在看到這一點後,在EFS中集成了兩者的優點。EFS使用了對稱加密和非對稱加密結合的工作方式,即先生成一個字元串作為密鑰採用對稱加密方法加密文件,然後,再使用非對稱加密加密這個密鑰。這個密鑰具體位數我記不得了,大約在70位。這里出現一個問題,實際在操作系統中,公鑰和私鑰是怎麼獲得的?為什麼管理員可以解開所有用戶的加密文件?

依照微軟的白皮書中解釋,加密文件系統中的用戶證書的獲得,有兩種途徑,一個是從CA(CertificationAuthority)獲得,另一種是在企業級CA失效的時候由本機為自己頒發一個數字證書。這里需要解釋的是證書和密鑰的關系,證書是密鑰的載體,在證書中包含了密鑰。這里可能又有人要問,用戶的私鑰是存放在什麼地方?用戶的私鑰是通過另外一種驗證機制實現的,這個在系統層面,日後我會寫文章加以闡釋。除了這兩個密鑰,還有一個用於直接加密文件的密鑰,這個根據用戶自己的SID計算出來的,微軟沒有公開這方面的信息,還請有心人共同嘗試理解其中的工作原理。管理員之所以可以管理所有用戶的加密文件,是為了保證系統的穩定,如果每一個用戶的文件都只有創建者可以修改,那麼計算機可能因此陷入混亂的狀態。

近日聽聞有些軟體可以破解微軟的EFS,我本為之興奮,結果下載後研究了一下,這種軟體的工作原理是備份出管理員的帳戶信息,通過ERA(緊急恢復代理)實現加密文件的恢復。事實上,如果用戶不慎在重新安裝系統的時候忘記備份出相應的密鑰,那麼這個加密過的文件可能永遠打不開。這一點不難理解,因為每一次安裝操作系統,操作系統會隨即生成一個SID號,當然,如果用戶的人品足夠好,還是可能生成一樣的SID號的(開個玩笑)。關於備份管理員賬號和密碼,可以通過Windows2000及後續版本中內建的忘記密碼向導來幫助備份密碼。希望可以給大家一些幫助。

2. 求JAVA解壓縮文件目錄的源代碼

packagecom.io2.homework;

importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileNotFoundException;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.util.zip.ZipEntry;
importjava.util.zip.ZipOutputStream;

/*壓縮文件夾*/
publicclassMyMultipleFileZip
{
="F:/MyZip.zip";
privateStringsourceFilePath;
privateZipOutputStreamzos;
privateFileInputStreamfis;

publicMyMultipleFileZip(StringsourceFilePath)
{
try
{
this.sourceFilePath=sourceFilePath;
zos=newZipOutputStream(newFileOutputStream(currentZipFilePath));
//設定文件壓縮級別
zos.setLevel(9);
}catch(FileNotFoundExceptione)
{
e.printStackTrace();
}
}

//在當前條目中寫入具體內容
publicvoidwriteToEntryZip(StringfilePath)
{
try
{
fis=newFileInputStream(filePath);
}catch(FileNotFoundExceptione1)
{
e1.printStackTrace();
}
byte[]buff=newbyte[1024];
intlen=0;
try
{
while((len=fis.read(buff))!=-1)
{
zos.write(buff,0,len);
}
}catch(IOExceptione)
{
e.printStackTrace();
}finally
{
if(fis!=null)
try
{
fis.close();
}catch(IOExceptione)
{
e.printStackTrace();
}
}
}

//添加文件條目
publicvoidaddFileEntryZip(StringfileName)
{
try
{
zos.putNextEntry(newZipEntry(fileName));
}catch(IOExceptione)
{
e.printStackTrace();
}
}

(StringdirectoryName)
{
try
{
zos.putNextEntry(newZipEntry(directoryName+"/"));
}catch(IOExceptione)
{
e.printStackTrace();
}
}

//遍歷文件夾
publicvoidlistMyDirectory(StringfilePath)
{
Filef=newFile(filePath);
File[]files=f.listFiles();
if(files!=null)
{
for(FilecurrentFile:files)
{
//設置條目名稱(此步驟非常關鍵)
StringentryName=currentFile.getAbsolutePath().split(":")[1].substring(1);
//獲取文件物理路徑
StringabsolutePath=currentFile.getAbsolutePath();
if(currentFile.isDirectory())
{
addDirectoryEntryZip(entryName);
//進行遞歸調用
listMyDirectory(absolutePath);

}
else
{
addFileEntryZip(entryName);
writeToEntryZip(absolutePath);
}
}
}
}

//主要流程
publicvoidmainWorkFlow()
{
listMyDirectory(this.sourceFilePath);
if(zos!=null)
try
{
zos.close();
}catch(IOExceptione)
{
e.printStackTrace();
}
}

publicstaticvoidmain(String[]args)
{
newMyMultipleFileZip("F:/fountainDirectory").mainWorkFlow();
}
}

3. java壓縮文件怎麼解壓

後綴名為.jar的文件不要解壓,直接在java中運行就好了

4. java中怎麼解壓rar文件 到指定文件目錄中

1.代碼如下:
[java] view plain
<span style="font-size:18px;background-color: rgb(204, 204, 204);">package cn.gov.csrc.base.util;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
* 將文件夾下面的文件
* 打包成zip壓縮文件
*
* @author admin
*
*/
public final class FileToZip {
private FileToZip(){}
/**
* 將存放在sourceFilePath目錄下的源文件,打包成fileName名稱的zip文件,並存放到zipFilePath路徑下
* @param sourceFilePath :待壓縮的文件路徑
* @param zipFilePath :壓縮後存放路徑
* @param fileName :壓縮後文件的名稱
* @return
*/
public static boolean fileToZip(String sourceFilePath,String zipFilePath,String fileName){
boolean flag = false;
File sourceFile = new File(sourceFilePath);
FileInputStream fis = null;
BufferedInputStream bis = null;
FileOutputStream fos = null;
ZipOutputStream zos = null;
if(sourceFile.exists() == false){
System.out.println("待壓縮的文件目錄:"+sourceFilePath+"不存在.");
}else{
try {
File zipFile = new File(zipFilePath + "/" + fileName +".zip");
if(zipFile.exists()){
System.out.println(zipFilePath + "目錄下存在名字為:" + fileName +".zip" +"打包文件.");
}else{
File[] sourceFiles = sourceFile.listFiles();
if(null == sourceFiles || sourceFiles.length<1){
System.out.println("待壓縮的文件目錄:" + sourceFilePath + "裡面不存在文件,無需壓縮.");
}else{
fos = new FileOutputStream(zipFile);
zos = new ZipOutputStream(new BufferedOutputStream(fos));
byte[] bufs = new byte[1024*10];
for(int i=0;i<sourceFiles.length;i++){
//創建ZIP實體,並添加進壓縮包
ZipEntry zipEntry = new ZipEntry(sourceFiles[i].getName());
zos.putNextEntry(zipEntry);
//讀取待壓縮的文件並寫進壓縮包里
fis = new FileInputStream(sourceFiles[i]);
bis = new BufferedInputStream(fis, 1024*10);
int read = 0;
while((read=bis.read(bufs, 0, 1024*10)) != -1){
zos.write(bufs,0,read);
}
}
flag = true;
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
throw new RuntimeException(e);
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally{
//關閉流
try {
if(null != bis) bis.close();
if(null != zos) zos.close();
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
return flag;
}
public static void main(String[] args){
String sourceFilePath = "D:\\TestFile";
String zipFilePath = "D:\\tmp";
String fileName = "12700153file";
boolean flag = FileToZip.fileToZip(sourceFilePath, zipFilePath, fileName);
if(flag){
System.out.println("文件打包成功!");
}else{
System.out.println("文件打包失敗!");
}
}
}
</span>
2.結果如下:
文件打包成功!
3.到D:/tmp下查看,你會發現生成了一個zip壓縮包.

5. java解壓zip文件

不好意思搞反了,這樣就更簡單了。
用這個構造方法ZipInputStream(InputStream in);接收傳過來的流,然後用這個類的getNextEntry()方法解壓縮文件,最後調用read(byte[] b, int off, int len)方法將數據寫入byte數組。
ZipInputStream zin = new ZipInputStream(in);
ZipEntry entry = null;
while((entry=zin.getNextEntry())!=null){
if(entry.isDirectory()||entry.getName().equals("..\\"))
continue;
BufferedInputStream bin = new BufferedInputStream(zin);
byte[] buf = new byte[];
bin.read(buf,0,1);
}

6. java中將一個文件夾下所有的文件壓縮成一個文件,然後,解壓到指定目錄.

import java.io.*;
import java.util.zip.*;
public class CompressD {
// 緩沖
static byte[] buffer = new byte[2048];
public static void main(String[] args) throws Exception {
// 來源
File inputDir = new File("C:\\CompressTest\\");
// 目標
FileOutputStream fos = new FileOutputStream("C:\\CompressTest.zip");
// 過濾
ZipOutputStream zos = new ZipOutputStream(fos);
// 壓縮
zip(inputDir.listFiles(), "", zos);
// 關閉
zos.close();
}
private static void zip(File[] files, String baseFolder, ZipOutputStream zos)
throws Exception {
// 輸入
FileInputStream fis = null;
// 條目
ZipEntry entry = null;
// 數目
int count = 0;
for (File file : files) {
if (file.isDirectory()) {
// 遞歸
zip(file.listFiles(), file.getName() + File.separator, zos);
continue;
}
entry = new ZipEntry(baseFolder + file.getName());
// 加入
zos.putNextEntry(entry);
fis = new FileInputStream(file);
// 讀取
while ((count = fis.read(buffer, 0, buffer.length)) != -1)
// 寫入
zos.write(buffer, 0, count);
}
}
}

7. java 解壓文件

給你找了一個 你參考一下吧:
package com.da.unzip;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.Reader;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

public class Unzip {

public static void main(String[] args) throws Exception {

Unzip unzip = new Unzip();
String zippath = "C:\\unzip\\";// /解壓到的目標文件路徑
String zipDir = "C:\\data\\";// 要解壓的壓縮文件的存放路徑

File file = new File(zipDir);
List list = unzip.getSubFiles(file);
for (Object obj : list) {
String realname = ((File)obj).getName();
System.out.println(realname);
int end = realname.lastIndexOf(".");
System.out.println("要解壓縮的文件名.........."+zipDir+realname);
System.out.println("解壓到的目錄" +zippath+realname.substring(0, end));
unzip.testReadZip(zippath,zipDir+realname);
}

}

/*
* 解壓縮功能. 將zippath目錄文件解壓到unzipPath目錄下. @throws Exception
*/
public void ReadZip(String zippath, String unzipPath) throws Exception {

ZipFile zfile = new ZipFile(unzipPath);// 生成一個zip文件對象

System.out.println(zfile.getName());// 獲取要解壓的zip的文件名全路徑

Enumeration zList = zfile.entries();// 返回枚舉對象

ZipEntry ze = null;// 用於表示 ZIP 文件條目

byte[] buf = new byte[1024];// 聲明位元組數組
/**
* 循環獲取zip文件中的每一個文件
*/
while (zList.hasMoreElements()) {
// 從ZipFile中得到一個ZipEntry
ze = (ZipEntry) zList.nextElement();
if (ze.isDirectory())// 如果為目錄條目,則返回 true,執行下列語句
{
System.out.println("Dir: " + ze.getName() + " skipped..");
continue;
}
int begin = zfile.getName().lastIndexOf("\\") + 1;
int end = zfile.getName().lastIndexOf(".");
String zipRealName = zfile.getName().substring(begin, end);
System.out.println("解壓縮開始Extracting:"+ze.getName()+"\t"+ze.getSize()+"\t"+ze.getCompressedSize());
// 以ZipEntry為參數得到一個InputStream,並寫到OutputStream中,並加上緩沖
OutputStream os = new BufferedOutputStream(
new FileOutputStream(getRealFileName(zippath + "\\"
+ zipRealName, ze.getName())));
InputStream is = new BufferedInputStream(zfile.getInputStream(ze));
String fileName = getRealFileName(zippath, ze.getName()).getName();
System.out.println("解壓出的文件名稱:" + fileName);
int readLen = 0;
while ((readLen = is.read(buf, 0, 1024)) != -1) {
os.write(buf, 0, readLen);
}
is.close();
os.close();
// System.out.println("解壓縮結束Extracted: "+ze.getName());
}
zfile.close();
}

/**
* 給定根目錄,返回一個相對路徑所對應的實際文件名.
*
* @param zippath
* 指定根目錄
* @param absFileName
* 相對路徑名,來自於ZipEntry中的name
* @return java.io.File 實際的文件
*/
private File getRealFileName(String zippath, String absFileName) {

String[] dirs = absFileName.split("/", absFileName.length());

File ret = new File(zippath);// 創建文件對象

if (dirs.length > 1) {
for (int i = 0; i < dirs.length - 1; i++) {
ret = new File(ret, dirs[i]);

}
}

if (!ret.exists()) {// 檢測文件是否存在
ret.mkdirs();// 創建此抽象路徑名指定的目錄
}
ret = new File(ret, dirs[dirs.length - 1]);// 根據 ret 抽象路徑名和 child
// 路徑名字元串創建一個新 File 實例

return ret;
}

}

8. java中怎麼用cmd命令解壓zip文件

對於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,將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 ar這個目錄,如果沒有-ep1那麼壓縮包中會出現winrar目錄路徑,而加了之後就只將當前目錄打包,只有rar目錄

9. java怎麼用Gzip實現文件的壓縮和解壓縮的

代碼:

10. java新人,在學習解壓縮文件時,解壓文件後,裡面的文件變文件夾

file.mkdirs();只有目錄才要創建文件夾,如果這個file本應該是文件,你卻創建了一個同名文件夾,那自然不能再創建這個文件了(即後面的file.createNewFile();無法創建文件).

另外,對於文件其實是不需要createNewFile的,因為如果你真要解壓文件,你要打開對應文件流,並且創一個輸出流,輸出到目標文件中(這個文件會自動創建的),但你的代碼裡面沒看到這個步驟,給你個完整的解壓示例.

importjava.io.File;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.OutputStream;
importjava.util.Enumeration;
importjava.util.zip.ZipEntry;
importjava.util.zip.ZipFile;

publicclassTest
{
publicstaticvoinZipFiles(StringzipPath,StringdescDir)throwsIOException
{
unZipFiles(newFile(zipPath),descDir);
}

publicstaticvoinZipFiles(FilezipFile,StringdescDir)throwsIOException
{
FilepathFile=newFile(descDir);
if(!pathFile.exists())
{
pathFile.mkdirs();
}
ZipFilezip=newZipFile(zipFile);
for(Enumerationentries=zip.entries();entries.hasMoreElements();)
{
ZipEntryentry=(ZipEntry)entries.nextElement();
StringzipEntryName=entry.getName();
InputStreamin=zip.getInputStream(entry);
StringoutPath=(descDir+zipEntryName).replaceAll("\*","/");

//獲取當前file的父路徑,這才是文件夾
Filefile=newFile(outPath.substring(0,outPath.lastIndexOf('/')));

//判斷路徑是否存在,不存在則創建文件路徑
if(!file.exists())
{
file.mkdirs();
}
//判斷文件全路徑是否為文件夾,如果是上面已經上傳,不需要解壓
if(newFile(outPath).isDirectory())
{
continue;
}
//輸出文件路徑信息
System.out.println(outPath);

OutputStreamout=newFileOutputStream(outPath);
byte[]buf1=newbyte[1024];
intlen;
while((len=in.read(buf1))>0)
{
out.write(buf1,0,len);
}
in.close();
out.close();
}
System.out.println("******************解壓完畢********************");
}

publicstaticvoidmain(String[]args)throwsException
{
unZipFiles(newFile("d:/test.zip"),"e:/");
}
}
閱讀全文

與java解壓縮文件相關的資料

熱點內容
給pdf加目錄 瀏覽:472
加密軟體怎麼改安全問題 瀏覽:548
cmd命令ip 瀏覽:946
python輸出單引號雙引號 瀏覽:272
腳本編程管理命令 瀏覽:379
小愛音箱pro怎麼自己裝app 瀏覽:118
建立ftp文件夾命令 瀏覽:570
sha1withrsa演算法 瀏覽:453
域名交易系統源碼php 瀏覽:171
求解微分方程數值解的命令有哪些 瀏覽:626
程序員轉時尚傳媒 瀏覽:82
古拳譜pdf 瀏覽:42
一元二次方程無實數根的演算法 瀏覽:352
程序員測試輕松嗎 瀏覽:171
英雄聯盟神魔怎麼綁定伺服器 瀏覽:983
音樂app怎麼換音質 瀏覽:975
python進階客戶流失 瀏覽:281
華為榮耀10伺服器地址 瀏覽:1000
javastring相等判斷 瀏覽:413
程序員考研究生學校 瀏覽:936