java之压缩/解压文件操作
版权声明:
本文为博主学习整理原创文章,如有不正之处请多多指教。
未经博主允许不得转载。https://blog.csdn.net/qq_42595261/article/details/83513858
压缩文件:
package com.company;
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class Zip {
public static void main(String[] args) throws IOException {
// write your code here
Zip main = new Zip();
//调用方法,zipFileName 压缩之后的文件路径和名字,inputfile 压缩之前的文件路径和名字
main.zip("D:/A.zip",new File("D:/xcl"));
System.out.println("压缩完成!");
}
private void zip(String zipFileName, File inputfile) throws IOException {
//创建ZipOutputStream类的对象
ZipOutputStream outputStream = new ZipOutputStream(new FileOutputStream(zipFileName));
//调用方法
zip(outputStream,inputfile,"");
//输出信息
System.out.println("压缩中。。。");
//将流关闭
outputStream.close();
}
private void zip(ZipOutputStream out,File file,String base) throws IOException {//方法重载
//判断是否为一个文件夹
if(file.isDirectory()){
//获取路径数组
File[] f1 = file.listFiles();
if(base.length() != 0){
//写入次目录的(Entry)接口
out.putNextEntry(new ZipEntry(base+"/"));
}
//循环遍历数据中的文件
for(int i=0;i<f1.length;i++){
zip(out,f1[i],base+f1[i]);
}
}else {
//创建新的进入点
out.putNextEntry(new ZipEntry(base));
//创建FileInputStream
FileInputStream in = new FileInputStream(file);
//定义int变量
int b;
while ((b = in.read()) != -1){ //如果没有达到流的尾部
//将字节写入到ZIP条目
out.write(b);
}
in.close();
}
}
}
解压文件:
package com.company;
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;
public class unzip {
public static void main(String[] args) throws IOException {
//当前解压的文件
File file = new File("F:\\hell.zip");
//创建ZipInputStream对象
ZipInputStream zipInputStream;
//创建解压文件对象
ZipFile zipFile = new ZipFile(file);
//实例化对象,指明要进行解压的文件
zipInputStream = new ZipInputStream(new FileInputStream(file));
//跳过根目录,获取下一个zip接口
ZipEntry entry = zipInputStream.getNextEntry();
//如果不为空,也不在同一目录下
while ((entry=zipInputStream.getNextEntry()) !=null&& !entry.isDirectory()){
//解压出的文件路径
File tmp = new File("F:\\"+entry.getName());
//如果该文件不存在
if(!tmp.exists()){
//创建文件父类文件夹路径
tmp.getParentFile().mkdirs();
//将文件目录中的文件放入输入流
OutputStream outputStream = new FileOutputStream(tmp);
//用输入流读取压缩文件中制定目录中的文件
InputStream inputStream = zipFile.getInputStream(entry);
int count = 0; //创建临时变量
//如有输入流可以读取到数值
while ((count = inputStream.read()) !=-1){
outputStream.write(count); //输入流写入
}
outputStream.close();
inputStream.close();
}
zipInputStream.closeEntry();
System.out.println(entry.getName()+"解压成功!");
}
zipInputStream.close();
}
}