java

位置:IT落伍者 >> java >> 浏览文章

用JAVA解压ZIP


发布日期:2021年05月17日
 
用JAVA解压ZIP

关于解压ZIP文件的类解决了中文问题及提高了解压的速度.希望对大家有所帮助.

import javaio*;

import javautil*;

import javautilzip*;

import sunio*;

public class linzip

{

public static String maketoGB(String str)

{

try{

  String str = new String(strgetBytes(_)GB);

  return str;

}catch(UnsupportedEncodingException ioe){

  return str;

}

}

public static void main(String[] args)

{

if (argslength < 1){

  System.err.println("Required parameter missing!");

  System.exit(-1);

}

File infile = new File(args[0]);

try{

  //检查是否是ZIP文件

  ZipFile zip = new ZipFile(infile);

  zip.close();

  

  //建立与目标文件的输入连接

  ZipInputStream in = new ZipInputStream(new FileInputStream(infile));

  ZipEntry file = in.getNextEntry();

  

   

  int i =infile.getAbsolutePath().lastIndexOf('.');

  String dirname = new String();

  if ( i != -1 )

   dirname = infile.getAbsolutePath().substring(0,i);

  else

   dirname = infile.getAbsolutePath();

  File newdir = new File(dirname);

  newdir.mkdir();

  

  byte[] c = new byte[1024];

  int len;

  int slen;

  

  while (file != null){

   

   i = make8859toGB(file.getName()).replace('/','\\').lastIndexOf('\\');

   if ( i != -1 ){

    File dirs = new File(dirname+File.separator+make8859toGB(file.getName()).replace('/','\\').substring(0,i));

    dirs.mkdirs();

    dirs = null;

   }

   

   System.out.print("Extract "+make8859toGB(file.getName()).replace('/','\\')+" ........  ");

   

   if (file.isDirectory()){

    File dirs = new File(make8859toGB(file.getName()).replace('/','\\'));

    dirs.mkdir();

    dirs = null;

   }

   else{

    FileOutputStream out = new FileOutputStream(dirname+File.separator+make8859toGB(file.getName()).replace('/','\\'));

    while((slen = in.read(c,0,c.length)) != -1)

     out.write(c,0,slen);

    out.close();

   }

   System.out.print("O.K.\n");

   file = in.getNextEntry();

  }

  in.close();

}catch(ZipException zipe){

  MessageBox(0,infile.getName()+"不是一个ZIP文件!","文件格式错误",16);

}catch(IOException ioe){

  MessageBox(0,"读取"+args[0]+"时错误!","文件读取错误",16);

}catch(Exception i){

   System.out.println("over");

}

}

/**

* @dll.import("USER32", auto)

*/

public static native int MessageBox(int hWnd, String lpText, String lpCaption, int uType);

}

以上程序在WIN98&VJ6.0测试通过.

               

上一篇:讲述在Java中Decorate的三种实现方法

下一篇:java性能优化-之一