package javasedemo.zip;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.apachemonspress.archivers.ArchiveEntry;
import org.apachemonspress.archivers.ArchiveInputStream;
import org.apachemonspress.archivers.ArchiveOutputStream;
import org.apachemonspress.archivers.ArchiveStreamFactory;
import org.apachemonspress.archivers.zip.ZipArchiveEntry;
import org.apachemonspress.utils.IOUtils;
public class ZipDemo {
public static void main(String[] args) {
File file=new File("C:\\Users\\tpc\\Desktop\\测试视频");
// compressFiles2Zip(file, "C:\\Users\\tpc\\Desktop\\testzip.zip");
decompressZip("C:\\Users\\tpc\\Desktop\\testzip.zip","C:\\Users\\tpc\\Desktop\\testzip");
}
/**
* 递归遍历所有文件
* @param file
*/
public static void putListFile2Archive(File file,String pathName,ArchiveOutputStream aos){
try {
if(file.isFile()){
//建立压缩包中的目录结构
ZipArchiveEntry zipArchiveEntry = new ZipArchiveEntry(pathName);
//添加成员到压缩包对象中
aos.putArchiveEntry(zipArchiveEntry);
//获取当前文件的输入流
InputStream is=new FileInputStream(file);
//将输入流内容读取到压缩包输出流中
py(is, aos);
//清除entry对象准备添加下一个文件
aos.closeArchiveEntry();
is.close();
}else{
File[] files=file.listFiles();
if(files.length>0){
for (File f : files) {
putListFile2Archive(f,pathName+File.Name(),aos);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 将文件打包成压缩包
*
* @param files
* @param zipFilePath
*/
public static void compressFiles2Zip(File file, String zipFilePath) {
if (file != null && ists() && isEndsWithZip(zipFilePath)) {
ArchiveOutputStream zaos = null;
try {
File zipFile = new File(zipFilePath).getParentFile();
//如果保存的文件上级目录不存在则创建
if(!ists()){
zipFile.mkdirs();
}
FileOutputStream fos=new FileOutputStream(zipFilePath);
zaos=new ArchiveStreamFactory("utf-8").createArchiveOutputStream("zip", fos);
//zaos = new ZipArchiveOutputStream(zipFile);
// Use Zip64 extensions for all entries where they are
// required
//zaos.setUseZip64(Zip64Mode.AsNeeded);
//递归遍历
putListFile2Archive(Name(),zaos);
//提交,关闭
zaos.finish();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (zaos != null) {
zaos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* 把zip文件解压到指定的文件夹
*
* @param zipFilePath
* zip文件路径, 如 "D:/test/aa.zip"
* @param saveFileDir
* 解压后的文件存放路径, 如"D:/test/"
*/
public static void decompressZip(String zipFilePath, String saveFileDir) {
if (isEndsWithZip(zipFilePath)) {
File file = new File(zipFilePath);
if (ists()) {
InputStream is = null;
// can read Zip archives
ArchiveInputStream zais = null;
try {
is = new FileInputStream(file);
zais = new ArchiveStreamFactory("utf-8").createArchiveInputStream("zip", is);
ArchiveEntry archiveEntry = null;
// 把zip包中的每个文件读取出来
// 然后把文件写到指定的文件夹
while ((archiveEntry = NextEntry()) != null) {
// 获取文件名
String entryFileName = Name();
// 构造解压出来的文件存放路径
String entryFilePath = saveFileDir +File.separator+ entryFileName;
//byte[] content = new byte[(int) Size()];
byte[] ByteArray(zais);
//ad(content);
OutputStream os = null;
try {
File saveFile = new File(entryFilePath).getParentFile();
//如果保存的文件上级目录不存在则创建
System.out.println("savefile:"+AbsolutePath());
if(!ists()){
saveFile.mkdirs();
}
// 把解压出来的文件写到指定路径
os = new FileOutputStream(entryFilePath);
os.write(content);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (os != null) {
os.flush();
os.close();
}
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (zais != null) {
zais.close();
}
if (is != null) {
is.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
/**
* 判断文件名是否以.zip为后缀
*
* @param fileName
* 需要判断的文件名
* @return 是zip文件返回true,否则返回false
*/
public static boolean isEndsWithZip(String fileName) {
boolean flag = false;
if (fileName != null && !"".im())) {
if (dsWith(".ZIP") || dsWith(".zip")) {
flag = true;
}
}
return flag;
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论