MAVEN下增加依赖
<dependency>
<groupId>com.github.junrar</groupId>
<artifactId>junrar</artifactId>
<version>0.7</version>
</dependency>
JAVA代码
解压RAR格式
public void decompressRar(File file, String descDir) throws IOException {
if (null == file || StringUtils.isEmpty(descDir)) {
return;
}
byte[] bytes = new byte[1024];
Archive archive = null;
try {
archive = new Archive(file);
List<FileHeader> files = archive.getFileHeaders();
for (FileHeader fh : files) {
String compressFileName = "";
if (fh.isUnicode()) {
compressFileName = fh.getFileNameW().trim();
} else {
compressFileName = fh.getFileNameString().trim();
}
File entryFile = new File(descDir + File.separator + compressFileName);
if (fh.isDirectory()) {
entryFile.mkdirs();
} else {
File entryParent = new File(entryFile.getParent());
if (!entryParent.exists()) {
entryParent.mkdirs();
}
InputStream inputStream = archive.getInputStream(fh);
OutputStream outputStream = new FileOutputStream(entryFile);
int len;
while ((len = inputStream.read(bytes)) > 0) {
outputStream.write(bytes, 0, len);
}
inputStream.close();
outputStream.flush();
outputStream.close();
}
}
} catch (RarException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
解压ZIP格式
public void decompressZip(File file, String descDir) throws IOException {
if (null == file || StringUtils.isEmpty(descDir)) {
return;
}
byte[] bytes = new byte[1024];
Charset utf = Charset.forName("UTF-8");
ZipFile zipFile = new ZipFile(file, utf);
Enumeration<ZipEntry> entries = (Enumeration<ZipEntry>) zipFile.entries();
try {
entries.nextElement();
} catch (IllegalArgumentException ex) {
zipFile = new ZipFile(file, Charset.forName("GBK"));
entries = (Enumeration<ZipEntry>) zipFile.entries();
}
while (entries.hasMoreElements()) {
ZipEntry entry = entries.nextElement();
File entryFile = new File(descDir + File.separator + entry.getName());
if (entry.isDirectory()) {
entryFile.mkdir();
} else {
File entryParent = new File(entryFile.getParent());
if (!entryParent.exists()) {
entryParent.mkdir();
}
InputStream inputStream = zipFile.getInputStream(entry);
OutputStream outputStream = new FileOutputStream(entryFile);
int len;
while ((len = inputStream.read(bytes)) > 0) {
outputStream.write(bytes, 0, len);
}
inputStream.close();
outputStream.flush();
outputStream.close();
}
}
}