java 实现 文件Zip解压缩
时间: 2024-06-10 13:04:08 浏览: 13
Java中可以使用java.util.zip包来实现文件的解压缩。具体步骤如下:
1. 导入java.util.zip包。
2. 创建一个ZipFile对象,指定要解压缩的zip文件路径。
3. 获取zip文件中的所有条目(entry)。
4. 遍历每个条目,获取输入流。
5. 创建输出流,指定解压缩后的文件路径。
6. 使用缓冲流读取输入流的数据,并写入输出流。
7. 关闭输入流和输出流。
相关问题
Java实现对zip和rar文件的解压缩
Java提供了ZipInputStream和ZipOutputStream类来实现对zip文件的解压缩和压缩,同时也提供了解压缩RAR文件的开源库,如junrar等。以下是一个示例代码,演示如何使用ZipInputStream和ZipEntry来解压缩zip文件:
```java
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class Unzip {
public static void main(String[] args) throws IOException {
String zipFilePath = "path/to/zip/file.zip";
String destDirectory = "path/to/destination/folder";
unzip(zipFilePath, destDirectory);
}
public static void unzip(String zipFilePath, String destDirectory) throws IOException {
File destDir = new File(destDirectory);
if (!destDir.exists()) {
destDir.mkdir();
}
ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipFilePath));
ZipEntry entry = zipIn.getNextEntry();
while (entry != null) {
String filePath = destDirectory + File.separator + entry.getName();
if (!entry.isDirectory()) {
extractFile(zipIn, filePath);
} else {
File dir = new File(filePath);
dir.mkdir();
}
zipIn.closeEntry();
entry = zipIn.getNextEntry();
}
zipIn.close();
}
private static void extractFile(ZipInputStream zipIn, String filePath) throws IOException {
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath));
byte[] bytesIn = new byte[4096];
int read = 0;
while ((read = zipIn.read(bytesIn)) != -1) {
bos.write(bytesIn, 0, read);
}
bos.close();
}
}
```
对于RAR文件的解压缩,可以使用开源库junrar:
```java
import com.github.junrar.Archive;
import com.github.junrar.exception.RarException;
import com.github.junrar.impl.FileVolumeManager;
import com.github.junrar.rarfile.FileHeader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Unrar {
public static void main(String[] args) throws RarException, IOException {
String rarFilePath = "path/to/rar/file.rar";
String destDirectory = "path/to/destination/folder";
unrar(rarFilePath, destDirectory);
}
public static void unrar(String rarFilePath, String destDirectory) throws RarException, IOException {
Archive archive = new Archive(new FileVolumeManager(new File(rarFilePath)));
FileHeader fileHeader = archive.nextFileHeader();
while (fileHeader != null) {
String filePath = destDirectory + File.separator + fileHeader.getFileNameString().trim();
if (fileHeader.isDirectory()) {
File dir = new File(filePath);
dir.mkdirs();
} else {
FileOutputStream fos = new FileOutputStream(new File(filePath));
archive.extractFile(fileHeader, fos);
fos.close();
}
fileHeader = archive.nextFileHeader();
}
archive.close();
}
}
```
java 实现把文件压缩成zip
Java中可以使用java.util.zip包下的相关类来实现将文件压缩成zip文件的功能。以下是一个简单的示例代码:
```java
import java.io.*;
import java.util.zip.*;
public class ZipUtils {
public static void compressFileToZip(String sourceFilePath, String zipFilePath) {
try {
// 创建压缩文件输出流
FileOutputStream fos = new FileOutputStream(zipFilePath);
ZipOutputStream zos = new ZipOutputStream(fos);
// 创建待压缩的文件输入流
FileInputStream fis = new FileInputStream(sourceFilePath);
BufferedInputStream bis = new BufferedInputStream(fis);
// 往压缩包中写入文件
zos.putNextEntry(new ZipEntry(sourceFilePath));
byte[] buffer = new byte[1024];
int len;
while ((len = bis.read(buffer)) > 0) {
zos.write(buffer, 0, len);
}
// 关闭输入输出流
bis.close();
fis.close();
zos.closeEntry();
zos.close();
System.out.println("文件压缩成功!");
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String sourceFilePath = "source.txt"; // 待压缩的文件路径
String zipFilePath = "compressed.zip"; // 压缩后的zip文件路径
compressFileToZip(sourceFilePath, zipFilePath);
}
}
```
以上代码中,我们首先创建一个压缩文件输出流(`ZipOutputStream`),并指定输出文件路径。然后创建一个待压缩的文件输入流(`FileInputStream`)和一个缓冲输入流(`BufferedInputStream`)。接下来,我们将待压缩的文件写入压缩包(`zip` 文件)中,并使用缓冲区逐块写入。最后,关闭输入输出流,完成文件的压缩操作。
注意:上述代码只能压缩一个文件,如果要压缩多个文件,需要在循环中依次压缩每一个文件。另外,压缩完成后,可以通过解压缩操作还原被压缩的文件。