package zipCompress;
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
public class zipfile {
public static void main(String[] agrs){
zipfile zip = new zipfile();
File f = new File("file");
try {
//压缩
zip.startZip(f.getName()+".zip",f);
//解压
zip.unZipFile("file.zip");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 多级文件压缩文件
* @param zipFileName 压缩后的路径和文件名
* @param inputFile 被压缩的文件
* @throws Exception
*/
private void startZip(String zipFileName,File inputFile) throws Exception {
//创建压缩路径
File zipfile = new File(zipFileName);
if (!zipfile.exists()){
zipfile.mkdirs();
}
ZipOutputStream z_out = new ZipOutputStream(new FileOutputStream(new File(savepath,file.getName()+".zip")));
ZipFile(z_out,inputFile,inputFile.getName());
z_out.closeEntry();
z_out.close();
}
/**
* 压缩文件方法
* @param z_out 压缩流
* @param inputFile 被压缩的文件
* @param base
* @throws IOException
*/
private void ZipFile(ZipOutputStream z_out,File inputFile,String base) throws IOException {
if (inputFile.isDirectory()){
File[] files = inputFile.listFiles();
//文件夹的路径需要加/分隔符 不能是\
//new ZipEntry(base) 表示生成zip压缩的对应被压缩文件的目录结构
//如果bas为空 获取文件夹的名称加/
base = base.length() == 0 ?inputFile.getName()+"/":base+"/";
z_out.putNextEntry(new ZipEntry(base));
for (int i = 0; i <files.length; i++) {
ZipFile(z_out,files[i],base+files[i].getName());
}
}else {
//创建新的进入点
z_out.putNextEntry(new ZipEntry(base));
//System.out.println(base); //输出文件结构
//创建文件读取流获取被压缩文件的内容
FileInputStream in = new FileInputStream(inputFile);
int b;
while ((b = in.read()) != -1){
//写入到压缩流中
z_out.write(b);
}
in.close();
}
}
/**
* 解压Zip文件夹
* @param inputFile 输入文件名
* @throws IOException
*/
private void unZipFile(String inputFile) throws IOException {
ZipInputStream z_in = new ZipInputStream(new FileInputStream(inputFile));
//获得目录结构 只能获取当前一级目录
ZipEntry entry = null;
FileOutputStream out = null;
while (((entry = z_in.getNextEntry()) != null)){
File file = new File(entry.getName());
if(entry.isDirectory()){
if (!file.exists()){
//如果不存在 创建所在文件夹
file.mkdir();
}
}else {
//获取文件的目录
//System.out.println("ss:"+entry);
if (!file.exists()){
//如果不存在 创建所在文件
file.createNewFile();
}
//写入文件
out = new FileOutputStream(file);
int b;
while ((b = z_in.read()) != -1){
//写入到压缩流中
out.write(b);
}
out.close();
}
z_in.closeEntry();
}
z_in.close();
}
}
Java压缩与解压文件的简单使用
最新推荐文章于 2024-07-11 20:06:08 发布