Java 解压zip和rar
1、前言
解压zip相对简单,rar解压目前不支持版本5.0及以上,用户使用的软件版本小于5.0才能正常解压
Java代码解压rar文件
2、pom
<!--rar解压缩-->
<dependency>
<groupId>com.github.junrar</groupId>
<artifactId>junrar</artifactId>
<version>7.5.3</version>
</dependency>
原理
import com.github.junrar.Archive;
import com.github.junrar.rarfile.FileHeader;
import java.io.File;
import java.io.FileInputStream;
import java.nio.charset.Charset;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class ZIPRARUtil {
public static boolean zipHasDcmFile(File file) {
ZipInputStream zin = null;
FileInputStream fis = null;
try {
Charset gbk = Charset.forName("GBK");
fis = new FileInputStream(file);
zin = new ZipInputStream(fis, gbk);
ZipEntry ze = null;
while ((ze = zin.getNextEntry()) != null) {
//String path = ze.getName();
//System.out.println("path" + path);
if (!ze.isDirectory() && ze.toString().endsWith(".dcm")) {
return true;
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (zin != null) {
zin.closeEntry();
zin.close();
}
if (fis != null)
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return false;
}
public static boolean rarHasDcmFile(File file) {
FileInputStream fis = null;
Archive archive = null;
try {
fis = new FileInputStream(file);
archive = new Archive(fis);
List<FileHeader> fileHeaderList = archive.getFileHeaders();
for (FileHeader header : fileHeaderList) {
//System.out.println("header=" + header.getFileNameString());
if (!header.isDirectory() && header.getFileNameString().endsWith(".dcm")) {
return true;
}
}
} catch (Exception e) {
System.out.println(e.getMessage());
} finally {
try {
if (fis != null) {
fis.close();
}
if (archive != null) {
fis.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
return false;
}
}