当前位置:首页 » 文件管理 » 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 09:40:51 浏览:135
月报的算法 发布:2025-08-17 09:36:25 浏览:893
安卓版本10怎么打开隐藏游戏 发布:2025-08-17 09:33:25 浏览:588
php获取地址栏 发布:2025-08-17 09:31:59 浏览:120
燃料存储检查 发布:2025-08-17 09:30:45 浏览:679
怎么取消qq漫游密码 发布:2025-08-17 09:24:53 浏览:456
linux微型 发布:2025-08-17 09:18:26 浏览:523
一个服务器怎分为多台电脑 发布:2025-08-17 09:17:29 浏览:975
服务器被入侵怎么办 发布:2025-08-17 09:12:29 浏览:56
python保存到excel 发布:2025-08-17 09:12:28 浏览:669