java 实现 rar压缩和解压
时间: 2023-08-09 17:12:18 浏览: 239
Java中可以使用Apache Commons Compress库来实现RAR文件的压缩和解压。下面是一个简单的示例代码:
1. 压缩RAR文件
```
import org.apache.commons.compress.archivers.ArchiveEntry;
import org.apache.commons.compress.archivers.ArchiveOutputStream;
import org.apache.commons.compress.archivers.rar.RarArchiveOutputStream;
import org.apache.commons.compress.utils.IOUtils;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class RarCompressor {
public static void compress(File inputFile, File outputFile) throws IOException {
try (FileOutputStream fos = new FileOutputStream(outputFile);
ArchiveOutputStream aos = new RarArchiveOutputStream(fos)) {
ArchiveEntry entry = aos.createArchiveEntry(inputFile, inputFile.getName());
aos.putArchiveEntry(entry);
IOUtils.copy(inputFile, aos);
aos.closeArchiveEntry();
}
}
}
```
2. 解压RAR文件
```
import org.apache.commons.compress.archivers.ArchiveEntry;
import org.apache.commons.compress.archivers.ArchiveInputStream;
import org.apache.commons.compress.archivers.rar.RarArchiveInputStream;
import org.apache.commons.compress.utils.IOUtils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class RarExtractor {
public static void extract(File inputFile, File outputDir) throws IOException {
try (FileInputStream fis = new FileInputStream(inputFile);
ArchiveInputStream ais = new RarArchiveInputStream(fis)) {
ArchiveEntry entry;
while ((entry = ais.getNextEntry()) != null) {
if (!ais.canReadEntryData(entry)) {
continue;
}
File outputFile = new File(outputDir, entry.getName());
if (entry.isDirectory()) {
if (!outputFile.isDirectory() && !outputFile.mkdirs()) {
throw new IOException("Failed to create directory " + outputFile);
}
} else {
File parent = outputFile.getParentFile();
if (!parent.isDirectory() && !parent.mkdirs()) {
throw new IOException("Failed to create directory " + parent);
}
try (FileOutputStream fos = new FileOutputStream(outputFile)) {
IOUtils.copy(ais, fos);
}
}
}
}
}
}
```
使用方法示例:
```
File inputFile = new File("test.rar");
File outputFile = new File("test2.rar");
RarCompressor.compress(inputFile, outputFile); // 压缩RAR文件
File outputDir = new File("output");
RarExtractor.extract(outputFile, outputDir); // 解压RAR文件
```