楼主,把你的要求实现的功能再说明白点了,你说的在DOS下运行是指什么??

解决方案 »

  1.   

    package zip;import java.io.*;
    import java.util.*;
    import java.util.zip.*;public class zip {
      /***
       * 压缩制定文件/文件夹 ,压缩后的文件类型是zip;可以压缩中文内容的文本文件;
       * 可以实现属性结构文件夹的压缩,但是再中文名称得文件夹处理上有些问题,
       * 压缩后的中文件夹在用winrar解压不正确。
       * @param   strinfile 被压缩指定的文件/文件夹
       * @param   strzipfile压缩后的文件名称/文件夹名称;如果只给出了文件夹名称
       * 那压缩后的文件名称就是文件夹名称+"/.zip"
       *
       *
       */
      public static boolean zipfile(String infile, String strzipfile) {
        boolean blnzipfile = false;
        File filein;
        File fileout;
        String sourceFile = infile;
        //sourceFile = GBToUnicode(sourceFile);
        filein = new File(sourceFile);
        fileout = new File(strzipfile);
        /* if(fileout.isDirectory()){
           fileout = new File(strzipfile+"/.zip");
         }*/
        try {
          FileOutputStream f = new FileOutputStream(fileout);
          // CheckedOutputStream csum=new CheckedOutputStream(f,new Adler32());
          ZipOutputStream out = new ZipOutputStream(f);
          //new ZipOutputStream( new BufferedOutputStream(csum));
          String[] a = null;
          //a =filein.list();
          if (filein.isDirectory()) {
            a = filein.list();
            System.out.println("文件夹内文件个数:" + a.length);
            for (int i = 1; i <= a.length; i++) {
              zipFileDetail(filein.getPath(), a[i - 1], out);
            }
          }
          else {
            zipFileDetail("", sourceFile, out);
          }
          out.close();
          /*System.out.println("读文件");
               FileInputStream fi=new FileInputStream(fileout);
              // CheckedInputStream csumi=new CheckedInputStream(fi,new Adler32());
               ZipInputStream in2=new ZipInputStream(fi);
              //new ZipInputStream(new BufferedInputStream(csumi));
               ZipEntry ze;
              // System.out.println("读文件数:"+in2.ggetChecksum().getValue());
               while((ze=in2.getNextEntry())!=null){
            System.out.println("源文件路径:"+ze);
               }
               in2.close();
               ZipFile zf=new ZipFile(fileout);
               Enumeration e=zf.entries();
               while(e.hasMoreElements()){
            ZipEntry ze2=(ZipEntry)e.nextElement();
            System.out.println("压缩完成,压缩文件保存在:"+ strzipfile);
               }
               System.out.println("---ok finsih ");*/
        }
        catch (Exception e) {
          e.printStackTrace();
        }
        return blnzipfile = true;
      }  private static void zipFileDetail(String sPath, String strinfile,
                                        ZipOutputStream out) {
        System.out.println("路径"+sPath+"文件名"+strinfile);
        FileInputStream in = null;
        byte[] b = new byte[1024];
        try {
          String sFileName = "";
          if (sPath.length() > 0) {
            sFileName = sPath + "/" + strinfile;
          }
          else {
            sFileName = strinfile;      }
          File filein = new File(sFileName);
          if (filein.isDirectory()) {
            String[] a = null;
            a = filein.list();
            for (int i = 1; i <= a.length; i++) {
              zipFileDetail(sPath, strinfile + "/" + a[i - 1], out);
              // zipFileDetail(filein.getPath(),a[i-1],out);
            }
          }
          else {
            in = new FileInputStream(sFileName);
            //sFileName = new String (strinfile.getBytes());
            //out.putNextEntry(new ZipEntry(strinfile));
            //GBToUnicode
            out.putNextEntry(new ZipEntry(GBToUnicode(strinfile)));
            int c;
            while ( (c = in.read(b)) > 0) {
              out.write(b);
            }
          }
        }
        catch (Exception ex) {
        }
        finally {
          try {
            in.close();
          }
          catch (Exception e) {}
          b = null;
        }
      }  public static String UnicodeToGB(String strIn) {
        byte[] b;
        String strOut = null;
        if (strIn == null || (strIn.trim()).equals("")) {
          return strIn;
        }
        try {
          b = strIn.getBytes("GB2312");
          strOut = new String(b, "ISO8859_1");
        }
        catch (Exception e) {
          System.out.println("unicodeToGB exception : " + e.getMessage() + "\n");
        }
        return strOut;
      }  public static String GBToUnicode(String strIn) {
        byte[] b;
        String strOut = null;
        if (strIn == null || (strIn.trim()).equals("")) {
          return strIn;
        }
        try {
          b = strIn.getBytes("ISO8859_1");
          strOut = new String(b, "GB2312");
        }
        catch (Exception e) {
          System.out.println("GBToUnicode exception : " + e.getMessage() + "\n");
        }
        return strOut;
      }  public zip() {
      }  public static void main(String[] args) {
        zip zip1 = new zip();
        String s = "E:\\sql";
        zipfile(GBToUnicode(s), "e:\\sql.zip");
      }
    }
      

  2.   

    package zip;import java.util.zip.*;
    import java.io.*;
    import java.util.*;/**
     * <p>Title: </p>
     * <p>Description: </p>
     * <p>Copyright: Copyright (c) 2004</p>
     * <p>Company: </p>
     * @author not attributable
     * @version 1.0
     */public class upzip {
      public upzip() {
      }  public static void main(String[] args) {
        upzip upzip1 = new upzip();
        System.out.println("读文件");
        byte[] b = new byte[1024];
        try {
          File file = new File("d:\\sql");
          if (!file.exists()) {
            file.mkdir();
          }
          ZipEntry ze;
          ZipFile zf = new ZipFile("e:\\sql.zip");
          int i = 0;
          java.util.Enumeration e = zf.entries();
          while (e.hasMoreElements()) {
            ze = (java.util.zip.ZipEntry) e.nextElement();
            if (!ze.isDirectory()) { //是文件
              String name = ze.getName();
              System.out.println("文件名" + name);
              DataInputStream in = new DataInputStream(zf.getInputStream(ze));
              File file1 = new File(file + "\\" + name);
              if (!file1.exists()) {
                file1.createNewFile();
                DataOutputStream out = new DataOutputStream(new FileOutputStream(
                    file1));
                int c;
                while ( (c = in.read(b)) > 0) {
                  out.write(b);
                }
              }
            }
            else { //是目录        }
            i++;      }
          System.out.println("文件个数" + i);
          /*
           Enumeration e = zf.entries();
           while (e.hasMoreElements()) {
             ZipEntry ze2 = (ZipEntry) e.nextElement();
             if (ze2.isDirectory()) {
               //ze2.g
             }
             else {
             }
           }
           System.out.println("---ok finsih ");*/
        }
        catch (Exception e) {
          System.out.print(e.getMessage());
          e.printStackTrace();
        }  }}
      

  3.   

    以上是我用过的进行压缩,解压的两个类。在dos下运行就不用告你了吧,java命令。
      

  4.   

    老大们,我是叫你们安我的意思改哇1.&Iuml;&Egrave;new zipoutstream(new fileoutputstream()) 
                  2.&Ocirc;&Ugrave;&Eacute;è&Ntilde;&sup1;&Euml;&otilde;&frac14;&para;±&eth;
                  3.&Ntilde;&sup1;&Euml;&otilde;·&frac12;·¨
                  4.new zipentry(string)
                  5.zip.outnextentry
                  6.zip.write()//&Icirc;&Auml;&frac14;&thorn;&Aacute;÷
                  7.zip.outstream.close
      

  5.   

    //zip.java
    import java.io.*;
    import java.util.*;
    import java.util.zip.*;public class zip {
      public static void main(String[] args) throws IOException {    FileOutputStream f =
            new FileOutputStream("zip_test.zip  ");
        CheckedOutputStream chos =
            new CheckedOutputStream(f, new Adler32());
        ZipOutputStream zop = new ZipOutputStream(chos);
        for (int i = 0; i < args.length; i++) {
          zop.putNextEntry(new ZipEntry(args[i]));
          FileInputStream fs =
              new FileInputStream(args[i]);
          BufferedInputStream bf =
              new BufferedInputStream(fs);      int temp;
          while ( (temp = bf.read()) != -1) {
            zop.write(temp);
          }
        }
        zop.close();
    }
    import java.io.*;
    import java.util.*;
    import java.util.zip.*;public class unzip {
      public static void main(String[] args) throws IOException {    CheckedInputStream ck = new CheckedInputStream(
            new BufferedInputStream(
                new FileInputStream("zip_test.zip  ")),
            new Adler32());
        ZipInputStream zis = new ZipInputStream(ck);    ZipEntry ze = zis.getNextEntry();
        while (ze != null) {
          System.out.println(ze);
          FileWriter fw = new FileWriter("backup_" + ze.getName());
          BufferedWriter bw = new BufferedWriter(fw);      int temp = 0;
          while ( (temp = (int) zis.read()) != -1) {
            bw.write(temp);
          }
          bw.close();
          ze = zis.getNextEntry();
        }
        zis.close();
        ck.close();
    }
    }
    ---------------------
    测试:
    java zip 1.txt 2.txt
    java unzip
      

  6.   

    楼上的
    请问CheckedOutputStream  chos  =  
                   new  CheckedOutputStream(f,  new  Adler32());这一句的作用是什么为什么我想用的 int[]    ddd;  
               ddd  =  fs.ddd[args.length]; 用不起来,好像下面那个while可以去掉吧
      

  7.   

    那句是做checksum(就是zip包含有crc校验)ddd那句什么意思?(没什么用)while是需要的
      

  8.   

    zip加绝对路径可以。比如c:\1.txt由于你的程序里
    FileWriter fw = new FileWriter("backup_  " + ze.getName());
    会出现"backup_c:\1.txt"的错误路径,所以报错
      

  9.   

    那你能否帮我写一个能实现我所要功能的ZIP并切可以打开的
    十分的感谢。
    ddd就是用zientry里的byte[]数组啊把fs.负值进去这样做就不要循环了,用while运行的速度慢
      

  10.   

    ddd  =  fs.ddd[args.length];  //???
    --------------------------
    要提高效率,修改while, 上面的程序每次仅读1个字节
          byte[] buf = new byte[1024];
          ...
          int len = 0;      
          while ( (len = bf.read(buf)) != -1) {
            zop.write(buf,0,len);
          }unzip中
    FileWriter fw = new FileWriter("backup_" + ze.getName()); 
                                   ---------------------------
                                   如果你非得解出来文件名不一样,那就ze.getName()+".backup"
      

  11.   

    看一下我写的可以通过了,但我想把它改成用调用函数的类型来写,请楼上的老大指点
    import  java.io.*;  
    import  java.util.*;  
    import  java.util.zip.*;  
     
    public  class  zip2  
    {  
       public  static  void  main(String[]  args)  throws  IOException  
       {  
     
           FileOutputStream  f  =  new  FileOutputStream(  "zip_test.zip      ");         ZipOutputStream  zop  =  new  ZipOutputStream(f);  
           
           for  (int i = 0;  i<args.length; i++)  
           {  
           zop.putNextEntry(new  ZipEntry(args[i]));  
               
            FileInputStream  fs  =  new  FileInputStream(args[i]);  
     
            byte[]  filebyte = new byte[fs.available()];
               
            fs.read(filebyte);
                
            zop.write(filebyte);  
                
           }  
           zop.close();  
    }
    }
      

  12.   

    void unzip(String zipfilename) throws IOException
       {
         System.out.println(zipfilename);
          FileInputStream fis= new FileInputStream(zipfilename);
         ZipInputStream zis = new ZipInputStream(fis);
         ZipEntry ze = zis.getNextEntry();
         while (ze != null)
         {
           //System.out.println(ze);
           FileOutputStream fw = new FileOutputStream( ze.getName());
          long ll = ze.getSize();
          int len = (int)ll;
          System.out.println(ll);
          byte[] temp = new byte[16298] ;
          zis.read(temp,0,16297);
          fw.write(temp);
          fw.close();
          ze = zis.getNextEntry();
       }
       
    zis.close();
    }
    为什么我解出来的东东,不是原来的东西unzip,请高手指点
      

  13.   

    还没搞定?-----------------------------------------------          
                   long ll = ze.getSize();
          int len = (int)ll;
          System.out.println(ll);
          byte[] temp = new byte[16298] ;
          zis.read(temp,0,16297);
          fw.write(temp); //不管读了多少,你都写入16298字节,所以你解出文件都是一样大
    -------------------------------------------
    读多少,写多少
    上面的unzip类中不是有代码吗
      

  14.   


    package com.beiwei.zip.zipType;
    /**
    * <p>Title: 压缩文件</p>
    * <p>Description:利用org.apache.tools.zip解决了解压zip时中文名称出错的情况 </p>
    * <p>Copyright: Copyright (c) 2004</p>
    * <p>Company: </p>
    * @author liwei
    * @version 1.0
    */
    import java.io.*;
    import java.text.SimpleDateFormat;
    import java.util.*;
    import java.util.zip.Adler32;
    import java.util.zip.CheckedOutputStream;
    import org.apache.tools.zip.ZipEntry;
    import org.apache.tools.zip.ZipOutputStream;
    public class Zip 
    {
    FileOutputStream fos;
    CheckedOutputStream csum;
    ZipOutputStream zos;
    int index;
    /**
        * @deprecated 压缩处理
        * @param zipFileName 要进行压缩处理的文件(d:/aa.zip 或者 d:/\aa)
        * @param outputDirectory 压缩处理后的文件路径(d:/哈哈.zip 或 d:/ 如果是目录则以时间命名生成.zip文件)
        * @return void
        */
       public void zip(String inputFile,String outputFile) {
           try {
            File in_f=new File(inputFile);
            File out_f=new File(outputFile);
            if(out_f.isDirectory()) 
            out_f=new File(outputFile+"/"+new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())+".zip");

            if(!in_f.exists())
            System.out.println("文件不存在!");
            else
            {
            fos=new FileOutputStream(out_f);
            csum=new CheckedOutputStream(fos,new Adler32());
            zos=new ZipOutputStream(new BufferedOutputStream(csum));
            index=out_f.toString().lastIndexOf("\\");
            zipF(in_f);
            zos.close();
            }
           }
           catch (Exception ex) {
            System.out.println("异常:"+ex.getMessage());
           }
       }
       /**
        * @deprecated 迭代压缩文件
        * @param f File 源文件对象
        * @throws Exception
        */
       public void zipF(File f) throws Exception{
        if(f.isFile()){
        FileInputStream in=new FileInputStream(f);
        String etr=f.toString().substring(index+1);
        zos.putNextEntry(new ZipEntry(etr));
        byte[] b=new byte[4096];
        int byte_read;
        while((byte_read=in.read(b))!=-1)
        zos.write(b,0,byte_read);
        in.close();
        return;
        }
        else{
        ZipEntry  ze=new ZipEntry(f.toString().substring(index+1)+"/");
        zos.putNextEntry(ze);
        File[] fs=f.listFiles();
        if(fs!=null)
        for(int i=0;i<fs.length;i++)
        zipF(fs[i]);
        }
        }
       //测试
       public static void main(String[] args){
       try{
        //Zip zip=new Zip();
        //zip.zip("e:/哈哈","e:/呵呵.zip");
        //zip.zip("e:/哈哈","e:/");
       }catch(Exception e){e.printStackTrace(System.out);}
       }
    }
      

  15.   

    /*
     * 创建日期 2005-2-26
     */
    package com.beiwei.zip.zipType ;import java.io.* ;
    import java.util.* ;
    import org.apache.tools.zip.ZipFile ;
    import org.apache.tools.zip.ZipEntry ;/**
     * @Description: 解压zip文件 
     * @author liwei 
     */
    public class UZip
    { /**
     * @deprecated 解压处理
     * @param zipFileName
     *            要进行压缩处理的文件(d:/aa.zip")
     * @param outputDirectory
     *            压缩处理后的文件路径(d:/)
     */
    public void unzip(String zipFileName, String outputDirectory)
    throws Exception
    {
    try
    {
    ZipFile zipFile = new ZipFile(zipFileName) ;
    Enumeration e = zipFile.getEntries( ) ; org.apache.tools.zip.ZipEntry zipEntry = null ; while (e.hasMoreElements( ))
    {
    zipEntry = (ZipEntry) e.nextElement( ) ;
    System.out.println("unziping " + zipEntry.getName( )) ;
    if ( zipEntry.isDirectory( ) )
    {
    String name = zipEntry.getName( ) ;
    name = name.substring(0, name.length( ) - 1) ;
    File f = new File(outputDirectory + File.separator + name) ;
    f.mkdirs( ) ;
    }
    else
    { File f1 = new File(outputDirectory) ;
    File f = new File(outputDirectory + File.separator
    + zipEntry.getName( )) ;
    System.out.println(f.getParent());
    File f2=new File(f.getParent());
    if(!f2.exists()) f2.mkdirs();

    f.createNewFile( ) ;
    InputStream in = zipFile.getInputStream(zipEntry) ;
    FileOutputStream out = new FileOutputStream(f) ;
    //--------解决了图片失真的情况
    int c ;
    byte [ ] by = new byte [ 1024 ] ;
    while ((c = in.read(by)) != -1)
    {
    out.write(by, 0, c) ;
    }
    out.close( ) ;
    in.close( ) ;

    }
    } }
    catch ( Exception ex )
    {
    System.out.println("异常:" + ex.getMessage( )) ;
    } }
    //测试
    public static void main(String [ ] args)
    {
    try
    {
    //UZip test = new UZip( ) ;
    //test.unzip("e:/kf.zip", "e:/hehe/") ; }
    catch ( Exception e )
    {
    e.printStackTrace(System.out) ;
    }
    }
    }