📄 zipdir.java
字号:
//对目录进行压缩,从静态入口方法看起
import java.util.*;
import java.util.zip.*;
import java.io.*;
class ZipDir
{
public void zip(String zipFileName,String[] inputFiles)throws Exception //1
{
File temp = null;//声明文件引用变量
for(int i = 0;i<inputFiles.length;i++){//通过循环取出控制台传来的文件列表的每一个文件
temp = new File(inputFiles[i]);//取出一个创建一个文件对象.
zip(zipFileName,temp);//此处用到递规调用2处的zip方法。
}
}
public void zip(String zipFileName,File inputFile)throws Exception{ //2 此处的inputFile文件是从for语句取出文件名然后创建为文件的对象。
ZipOutputStream out=new ZipOutputStream(new FileOutputStream(zipFileName)); //创建压缩对象
if(inputFile.isDirectory())//此处判断该文件是目录还是文件,如果是目录
{
zip(out,inputFile,"");//递规调用3处的zip方法,传入压缩对象、文件对象、空字符串
}
else//如果不是目录
{
zip(out,inputFile,inputFile.getName()); //递规调用3处的zip方法,传入压缩对象、文件对象、文件名
}
System.out.println("压缩完成!");
out.close();
}
public void zip(ZipOutputStream out,File f,String base)throws Exception{ //3
System.out.println("正在压缩: "+f.getName()+"... ..."); //显示某文件正在压缩的提示
if (f.isDirectory()) //此处再次判断该文件是目录还是文件,如果是目录
{
System.out.println("新建目录:"+f.getName());//提示新建某目录
File[] fl=f.listFiles(); //得到该目录下所有的文件对象
out.putNextEntry(new ZipEntry(base+"/")); //用压缩对象调用压入文件方法putNextEntry压入当前目录
System.out.println(base);//打出每次压入的目录
base=base.length()==0?"":base+"/"; //如果目录名长度等于0,则返回空,否则在目录名后加上/
// System.out.println(base);
for (int i=0;i<fl.length ;i++ ) //循环取出文件对象中的每一个文件对象
{
//对本目录下的所有文件对象递归调用本方法判断该目录下的文件对象是文件还是目录
zip(out,fl[i],base+fl[i].getName()); //传入压缩对象、文件对象、文件或目录名
}
}
else
{
System.out.println("新增文件:"+f.getName());//显示新增某文件
out.putNextEntry(new ZipEntry(base)); //用压缩对象调用压入文件方法putNextEntry,创建一个以传来的文件命名的空文件
FileInputStream in=new FileInputStream(f); //从指定的文件处读取数据
int b;
while ((b=in.read()) != -1) //不停的读
{
out.write(b); //不停的写入刚创建的压缩文件
}
in.close();
}
}
public static void main(String[] args)
{
try{
ZipDir t=new ZipDir(); //创建当前类对象
t.zip("c:/test.zip",args); //调用其中的zip方法第一个参数指明压缩文件名和存放路径,第二个参数从控制台接收压缩的文件列表
}
catch(Exception e){
e.printStackTrace();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -