當前位置:首頁 » 文件管理 » javazip解壓帶密碼

javazip解壓帶密碼

發布時間: 2022-12-19 05:35:30

1. 怎樣用java解壓winrar加密的zip包(不要調用winrar的命令)

命令 要 WinRAR 運行的字元組合代表功能
參數 切換操作指定類型,壓縮強度,壓縮包類型,等等的定義。
壓縮包 要進行的壓縮包名。
文件 要進行的文件名。
列表文件 列表文件是包含要處理文件名稱的純文本。文件名應該在第一卷啟動。可以在列表文件中使用//字元後添加註釋。例如,你可以包含兩列字元串創建 backup.lst: c:\work\doc\*.txt //備份文本文檔 c:\work\image\*.bmp //備份圖片 c:\work\misc 並接著運行: rar a backup @backup.lst 你可以在命令行中同時指定普通的文件名和列表文件名。
解壓縮路徑 只與命令 e 和 x ,搭配使用。指出解壓縮文件添加的位置。如果文件夾不存在時,會自動創建。
注意事項a) 如果未指定 文件 或是 列表文件 時,WinRAR 將會以預設的 *.* 運行全部的文件;
b) 如果未指定壓縮包擴展名時,WinRAR 將會使用在 壓縮配置 中選定的默認壓縮格式。但你可以指定 .RAR 或 .ZIP 擴展名來替換它們;
c) 在命令行所輸入的參數會替換相同的配置設置值;
d) 在命令 c、e、s、t、rr、k 和 x 可在壓縮包名中使用通配符。如此可以用單一的命令來進行超過一個以上的壓縮包,除此之外,如果你指定 -r 參數於這些命令時,它們將會搜索在子文件夾中的壓縮包;
e) 某些命令和參數只應用在 RAR 壓縮包,有些則在 RAR 和 ZIP 都可使用,而某些則可應用在全部的壓縮格式。這一些都得看壓縮格式所提供的特性而定;f) 命令和參數的大小寫是相同意思的,你可以用大寫或者小寫來下命令均可

2. java 以流的形式解壓帶密碼的zip

可以使用 Runtime 直接調用 winRar 的命令行命令來解壓縮
注意:
1、winRar命令使用,在dos下輸入 unrar 就可以看到全部的命令說明。該命令在winRar的安裝目錄下
2、winRar命令行命令的路徑問題,也就是path。要麼加入系統變數path中,要麼在winRar的安裝目錄下執行程序
以下是程序代碼,解壓 test.rar 到當前目錄下,密碼123

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class TestRunTime {

public static void main(String[] args) {
Runtime run = Runtime.getRuntime();
try {
Process p = run.exec("unrar e test.rar -p123");//執行解壓縮命令
BufferedInputStream in = new BufferedInputStream(p.getInputStream());
BufferedReader inBr = new BufferedReader(new InputStreamReader(in));
String lineStr;

while ((lineStr = inBr.readLine()) != null)
System.out.println(lineStr);
// 檢查命令是否執行失敗。
if (p.waitFor() != 0) {
if (p.exitValue() == 1)// p.exitValue()==0表示正常結束,1:非正常結束
System.err.println("命令執行失敗!");
}

} catch (Exception e) {
e.printStackTrace();
}

}

}

3. 怎麼用JAVA解壓winrar加密的zip包(不要調用winrar的命令)

文件中數據冗餘的最簡單的類型是"字元的復制"。讓我們先來看下面一個字元串:

JJJJJJAAAAVVVVAAAAAA

這個字元串可以用更簡潔的方式來編碼,那就是通過替換每一個重復的字元串為單個的實例字元加上記錄重復次數的數字來表示,上面的字元串可以被編碼為下面的形式:6J4A4V6A

在這里,"6J"意味著6個字元J,"4A"意味著4個字元A,以此類推。這種字元串壓縮方式稱為"行程長度編碼"方式,簡稱RLE。

再舉一個例子,考慮一下矩形圖像的存儲。一個單色點陣圖,可以被存儲為下面這種形式。

另外一種方式是將圖像存為一個圖元文件:

Rectangle 11, 3, 20, 5

上面的表示方法是講矩形的起始坐標是(11,3),寬度是20,高度是5。

上述的矩形圖像可以使用RLE編碼方式壓縮,通過對相同位記數表示如下:

0, 40

0, 40

0,10 1,20 0,10

0,10 1,1 0,18 1,1 0,10

0,10 1,1 0,18 1,1 0,10

0,10 1,1 0,18 1,1 0,10

0,10 1,20 0,10

0,40

上面第一行是講圖像的第一行由40個0組成。第三行是講圖像的第三行是由10個0加上20個1再加上10個0組成,其它行以此類推。

大家注意,RLE方法需要將其表示的文件與編碼文件分開。所以,這種方法不能應用於所有的文件。其它的壓縮技術包括變長編碼(也被稱為哈夫曼編碼),還有其它的方法。要想了解更詳細的信息,請參考有關數據和圖像壓縮技術方面的圖書,一定會有收獲的。

數據壓縮有很多益處。不管怎麼說,最主要的好處就是減少存儲方面的需求。同樣的,對於數據通信來講,壓縮數據在媒體中的將導致信息傳輸數據的提升。數據的壓縮能夠通過軟體在現有的硬體設備上實現或者通過帶有壓縮技術的特殊的硬體設備來實現。

ZIP VS GZIP

如果你是在Windows系統下工作,你可能會對工具WinZip很熟悉,是用來創建壓縮檔案和解開壓縮檔案的。而在UNIX平台上,會有一些不同,命令tar用來創建一個檔案文件(並不壓縮),其它的程序(gzip或compress)用來創建一個壓縮檔案。

WinZip和PkZip之類的工具同時扮演著歸檔和壓縮兩個角色。他們將文件壓縮並將其歸檔。另一方面,gzip並不將文件歸檔。所以,在UNIX平台上,命令tar通常用來創建一個檔案文件,然後命令gzip來將檔案文件壓縮。

Java.util.zip包

Java提供了java.util.zip包用來兼容ZIP格式的數據壓縮。它提供了一系列的類用來讀取,創建,修改ZIP和GZIP格式的文件。它還提供了工具類來計算任意輸入流的數目,這可以用來驗證輸入數據的有效性。該包提供了一個介面,十四個類,和兩個異常處理類,如表1所示。

表1: java.util.zip包

條目 類型 描述

Checksum 介面 被類Adler32和CRC32實現的介面

Adler32 類 使用Alder32演算法來計算Checksum數目

CheckedInputStream 類 一個輸入流,保存著被讀取數據的Checksum

CheckedOutputStream 類 一個輸出流,保存著被讀取數據的Checksum

CRC32 類 使用CRC32演算法來計算Checksum數目

Deflater 類 使用ZLIB壓縮類,支持通常的壓縮方式

DeflaterOutputStream 類 一個輸出過濾流,用來壓縮Deflater格式數據

GZIPInputStream 類 一個輸入過濾流,讀取GZIP格式壓縮數據

GZIPOutputStream 類 一個輸出過濾流,讀取GZIP格式壓縮數據

Inflater 類 使用ZLIB壓縮類,支持通常的解壓方式

InlfaterInputStream 類 一個輸入過濾流,用來解壓Inlfater格式的壓縮數據

ZipEntry 類 存儲ZIP條目

ZipFile 類 從ZIP文件中讀取ZIP條目

ZipInputStream 類 一個輸入過濾流,用來讀取ZIP格式文件中的文件

ZipOutputStream 類 一個輸出過濾流,用來向ZIP格式文件口寫入文件

DataFormatException 異常類 拋出一個數據格式錯誤

ZipException 異常類 拋出一個ZIP文件

注意:ZLIB壓縮類最初是作為可移植的網路圖像文件格式(PNG)標準的一部分開發的,是不受專利保護的。

從ZIP文件中解壓縮和提取數據

java.util.zip包提供了數據壓縮與解壓縮所需要的類。ZIP文件的解壓縮實質上就是從輸入流中讀取數據。Java.util.zip包提供了類ZipInputStream來讀取ZIP文件。ZipInputStream流的創建與其它輸入流的創建沒什麼兩樣。舉個例子,下面的代碼段創建了一個輸入流來讀取ZIP格式的文件:

FileInputStream fis = new FileInputStream("figs.zip");

ZipInputStream zin = new ZipInputStream(new BufferedInputStream(fis));

ZIP輸入流打開後,你可以使用getNextEntry方法來讀取ZIP文件中的條目數,該方法返回一個ZipEntry對象。如果到達文件的尾部,getNextEntry返回null:

ZipEntry entry;

while((entry = zin.getNextEntry()) != null) {

// extract data

// open output streams

}

現在,你應該建立一個輸出流,如下所示:

int BUFFER = 2048;

FileOutputStream fos = new FileOutputStream(entry.getName());

BufferedOutputStream dest = new BufferedOutputStream(fos, BUFFER);

注意:在這段代碼中我們用BufferedOutputStream代替了ZIPOutputStream。ZIPOutputStream和GZIPOutputStream使用內置的512位元組緩沖。當緩沖區的大小大於512位元組時,使用BufferedOutputStream才是正確的(例子中設置為2048)。ZIPOutputStream不允許你設置緩沖區的大小,GZIPOutputStream也是一樣,但創建 GZIPOutputStream 對象時可以通過構造函數的參數指定內置的緩沖尺寸。

這段代碼中,使用ZIP內含的條目名稱創建一個文件輸出流。可以使用entry.getName來得到它的返回句柄。接著讀出被壓縮的源數據,然後寫入輸出流:

while ((count = zin.read(data, 0, BUFFER)) != -1) {

//System.out.write(x);

dest.write(data, 0, count);

}

最後,不要忘記關閉輸入和輸出流:

dest.flush();

dest.close();

zin.close();

常式1的源程序UnZip.java顯示如何解壓縮並從ZIP檔案中將文件釋放出來。測試這個例子,編譯這個類,並運行它,傳給它一個ZIP格式的文件作為參數:

prompt> java UnZip somefile.zip

注意:somefile.zip應該是一個ZIP壓縮檔案,可以用任何一種ZIP壓縮工具來創建,例如WinZip。

4. 如何用java 將文件加密壓縮為zip文件.

用java加密壓縮zip文件:
package com.ninemax.demo.zip.decrypt;

import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.zip.DataFormatException;

import org.apache.commons.io.FileUtils;

import de.idyl.winzipaes.AesZipFileDecrypter;
import de.idyl.winzipaes.AesZipFileEncrypter;
import de.idyl.winzipaes.impl.AESDecrypter;
import de.idyl.winzipaes.impl.AESDecrypterBC;
import de.idyl.winzipaes.impl.AESEncrypter;
import de.idyl.winzipaes.impl.AESEncrypterBC;
import de.idyl.winzipaes.impl.ExtZipEntry;

/**
* 壓縮指定文件或目錄為ZIP格式壓縮文件
* 支持中文(修改源碼後)
* 支持密碼(僅支持256bit的AES加密解密)
* 依賴bcprov項目(bcprov-jdk16-140.jar)
*
* @author zyh
*/
public class DecryptionZipUtil {

/**
* 使用指定密碼將給定文件或文件夾壓縮成指定的輸出ZIP文件
* @param srcFile 需要壓縮的文件或文件夾
* @param destPath 輸出路徑
* @param passwd 壓縮文件使用的密碼
*/
public static void zip(String srcFile,String destPath,String passwd) {
AESEncrypter encrypter = new AESEncrypterBC();
AesZipFileEncrypter zipFileEncrypter = null;
try {
zipFileEncrypter = new AesZipFileEncrypter(destPath, encrypter);
/**
* 此方法是修改源碼後添加,用以支持中文文件名
*/
zipFileEncrypter.setEncoding("utf8");
File sFile = new File(srcFile);
/**
* AesZipFileEncrypter提供了重載的添加Entry的方法,其中:
* add(File f, String passwd)
* 方法是將文件直接添加進壓縮文件
*
* add(File f, String pathForEntry, String passwd)
* 方法是按指定路徑將文件添加進壓縮文件
* pathForEntry - to be used for addition of the file (path within zip file)
*/
doZip(sFile, zipFileEncrypter, "", passwd);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
zipFileEncrypter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

/**
* 具體壓縮方法,將給定文件添加進壓縮文件中,並處理壓縮文件中的路徑
* @param file 給定磁碟文件(是文件直接添加,是目錄遞歸調用添加)
* @param encrypter AesZipFileEncrypter實例,用於輸出加密ZIP文件
* @param pathForEntry ZIP文件中的路徑
* @param passwd 壓縮密碼
* @throws IOException
*/
private static void doZip(File file, AesZipFileEncrypter encrypter,
String pathForEntry, String passwd) throws IOException {
if (file.isFile()) {
pathForEntry += file.getName();
encrypter.add(file, pathForEntry, passwd);
return;
}
pathForEntry += file.getName() + File.separator;
for(File subFile : file.listFiles()) {
doZip(subFile, encrypter, pathForEntry, passwd);
}
}

/**
* 使用給定密碼解壓指定壓縮文件到指定目錄
* @param inFile 指定Zip文件
* @param outDir 解壓目錄
* @param passwd 解壓密碼
*/
public static void unzip(String inFile, String outDir, String passwd) {
File outDirectory = new File(outDir);
if (!outDirectory.exists()) {
outDirectory.mkdir();
}
AESDecrypter decrypter = new AESDecrypterBC();
AesZipFileDecrypter zipDecrypter = null;
try {
zipDecrypter = new AesZipFileDecrypter(new File(inFile), decrypter);
AesZipFileDecrypter.charset = "utf-8";
/**
* 得到ZIP文件中所有Entry,但此處好像與JDK里不同,目錄不視為Entry
* 需要創建文件夾,entry.isDirectory()方法同樣不適用,不知道是不是自己使用錯誤
* 處理文件夾問題處理可能不太好
*/
List<ExtZipEntry> entryList = zipDecrypter.getEntryList();
for(ExtZipEntry entry : entryList) {
String eName = entry.getName();
String dir = eName.substring(0, eName.lastIndexOf(File.separator) + 1);
File extractDir = new File(outDir, dir);
if (!extractDir.exists()) {
FileUtils.forceMkdir(extractDir);
}
/**
* 抽出文件
*/
File extractFile = new File(outDir + File.separator + eName);
zipDecrypter.extractEntry(entry, extractFile, passwd);
}
} catch (IOException e) {
e.printStackTrace();
} catch (DataFormatException e) {
e.printStackTrace();
} finally {
try {
zipDecrypter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

/**
* 測試
* @param args
*/
public static void main(String[] args) {
/**
* 壓縮測試
* 可以傳文件或者目錄
*/
// zip("M:\\ZIP\\test\\bb\\a\\t.txt", "M:\\ZIP\\test\\temp1.zip", "zyh");
// zip("M:\\ZIP\\test\\bb", "M:\\ZIP\\test\\temp2.zip", "zyh");

unzip("M:\\ZIP\\test\\temp2.zip", "M:\\ZIP\\test\\temp", "zyh");
}
}
壓縮多個文件時,有兩個方法(第一種沒試):
(1) 預先把多個文件壓縮成zip,然後調用enc.addAll(inZipFile, password);方法將多個zip文件加進來。
(2)針對需要壓縮的文件循環調用enc.add(inFile, password);,每次都用相同的密碼。

5. 怎麼用JAVA解壓winrar加密的zip包

WinRAR - - 命令 要 WinRAR 運行的字元組合代表功能 參數 切換操作指定類型,

6. java 解壓zip 密碼

調用開源項目winzipaes。

AesZipFileDecrypter zipFile = new AesZipFileDecrypter( new File("doc/zipSpecificationAes.zip") );
ExtZipEntry entry = zipFile.getEntry( "zipSpecification.txt" );
zipFile.extractEntry( entry, new File("doc/zipSpecification.txt"), "foo" );

具體參考下面鏈接

7. 求解 java 對壓縮文件zip 加密 !

所謂多zip加密,實際上就是一種對zip位元組流的一種對稱加密~其中解密的密碼,就是對稱加密中的密鑰

加密後的位元組保存為一個.zip的文件,打開之前必須輸入密碼(密鑰),通過密鑰將文件的位元組轉換成為普通的zip位元組,就能讀取出來了~
最好是寫一個加密的輸入輸出流,將zip的輸入輸出流包裝一下

8. java對zip文件進行加密

這個我不會。

對zip文件進行加密,我使用的超級加密3000.

超級加密 3000採用先進的加密演算法,使你的文件和文件夾加密後,真正的達到超高的加密強度,讓你的加密數據無懈可擊。

9. Java怎麼解壓帶密碼的ZIP文件

如果帶密碼的zip文件
要用java解壓
那麼肯定需要一個zip的解壓縮庫吧
然後使用了
應該就可以了

10. 怎麼用java解壓帶密碼的zip

如果帶密碼的zip文件 要用java解壓 那麼肯定需要一個zip的解壓縮庫吧
然後使用了 應該就可以了

熱點內容
如何找回手機密碼照片 發布:2025-08-17 00:02:06 瀏覽:718
python中cmp 發布:2025-08-16 23:47:44 瀏覽:598
java靜態單例 發布:2025-08-16 23:34:52 瀏覽:329
平板拷貝如何緩存 發布:2025-08-16 23:19:05 瀏覽:601
繽越混動有哪些配置 發布:2025-08-16 23:17:57 瀏覽:249
刪除linux文件後 發布:2025-08-16 23:09:04 瀏覽:649
采訪時的采訪問題 發布:2025-08-16 23:07:27 瀏覽:110
電腦客戶端登錄伺服器怎麼清除 發布:2025-08-16 22:55:46 瀏覽:527
壓縮小木條 發布:2025-08-16 22:55:41 瀏覽:22
存款利率演算法 發布:2025-08-16 22:48:44 瀏覽:588