📄 lastunzip.java
字号:
/**
*功能:文件解压
*用法:java ExtractZipFile zipfile DestinationPath
*是在ExtractZipFile基础上加上建立子目录的功能
*/
import java.io.*;
import java.util.*;
import java.util.zip.*;
public class LastUnZip
{
public void unzip(String zf,String des)//传来的两个参数zf为要解压的zip文件,des表示解压到哪个目录
{
//First Scan the Zip File
ScanZipFile scanzipfile=new ScanZipFile();//创建外部类对象,调用他的scan方法
if (scanzipfile.scan(zf)<0)//将要解压的文件名传进去,如果返回值小于0没有文件不能解压
{
System.out.println("UnZip Failed!Exiting now...");
}
else
{
System.out.println("**************************************************************");
System.out.println("* 输入Y或y开始解压这个文件,输入任何其他值退出解压该文件 *");
System.out.println("**************************************************************");
String inputString="";
byte buffer[]=new byte[255];//创建长度为255字节的字节数组
try
{
System.in.read(buffer,0,255);//从键盘接收字符到字节数组。
inputString=new String(buffer);//将字节数组构造为字符串
}
catch(IOException ex)
{
System.out.println(ex);
}
if(inputString.indexOf("Y")!=-1||inputString.indexOf("y")!=-1)//如果该字符串中包含Y或者y执行一下程序
{
try
{
ZipInputStream zin = new ZipInputStream(new FileInputStream(zf));//创建解压缩文件对象
ZipEntry entry;
System.out.println("开始解压缩 "+zf+":");
System.out.println("----------------------------------------------");
String filename;
while((entry=zin.getNextEntry())!=null)//取出压缩文件中的每一个文件对象
{
if(entry.isDirectory() || entry.getName().equals("..\\")) continue; // 如果是目录
String prefilename=entry.getName();//获取压缩文件中的目录名+文件名
/**
*将ZipEntry中用于路径分割的“/”转换成Windows中的路径分割符“\”
*如果一个ZipEntry中包含“/”,那么,说明它处于某个目录之下
*那就应该首先为这个文件新建一个路径
*/
System.out.println(prefilename);//测试看是否为目录名+文件名
prefilename=prefilename.replace('/','\\');
filename=des+"\\"+prefilename;//得到完整路径
System.out.println(filename);
int index1 = 0;
int index2 = 0;
String pathstr = "";
File path;
//递归建立目录
while(((index2=filename.indexOf('\\',index1))!=-1))//返回\\在filename中位置index1以后第一次出现的位置
{
pathstr =pathstr + filename.substring(index1,index2)+"\\";//得到\\第一次出现前的路径名
System.out.println(pathstr);
path = new File(pathstr);//创建文件对象
if(!path.exists())//判断该文件是否存在,如果不存在
{
System.out.println("-----------------------------------------------------");
System.out.println("新建路径 "+path+"...");
System.out.println("-----------------------------------------------------");
path.mkdir();//创建相应的目录
}
index1 = index2 + 1;//
}
System.out.println(entry.getName());
byte[] buf = new byte[1];
BufferedInputStream bin = new BufferedInputStream(zin);//创建读出压缩文件的对象
BufferedOutputStream bout = new BufferedOutputStream(new FileOutputStream(filename));//创建写出对象
while(bin.read(buf,0,1)!=-1)//读到字节数组中
{
bout.write(buf,0,1);//写出到filename指定的文件中
}
bout.close();
zin.closeEntry();
}
zin.close();
System.out.println("**************************************************************");
System.out.println("* 解压完成 *");
System.out.println("**************************************************************");
}
catch(IOException e)
{
System.out.println(e);
}
}
else
{
System.out.println("**************************************************************");
System.out.println("* 退出解压过程 *");
System.out.println("**************************************************************");
System.exit(0);
}
}
}
public static void main(String args[]) throws Exception
{
if(args.length!=2)//此处控制控制台传来的参数
{
System.out.println("*****************************************");
System.out.println("* 用法:java zip/jar文件 目标路径 *");
System.out.println("* Usage:java zip/jarFile DestinationPath*");
System.out.println("*****************************************");
System.exit(-1);
}
else
{
LastUnZip luz = new LastUnZip();//创建当前类对象
luz.unzip(args[0],args[1]); //接收两个参数第一个为要解压的zip文件,后一个表示解压到哪个目录
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -