能呀,你用递归判断呀.   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("&para;&Aacute;&Icirc;&Auml;&frac14;&thorn;");
           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("&para;&Aacute;&Icirc;&Auml;&frac14;&thorn;&Ecirc;&yacute;:"+in2.ggetChecksum().getValue());
           while((ze=in2.getNextEntry())!=null){
        System.out.println("&Ocirc;&acute;&Icirc;&Auml;&frac14;&thorn;&Acirc;·&frac34;&para;&pound;&ordm;"+ze);
           }
           in2.close();
           ZipFile zf=new ZipFile(fileout);
           Enumeration e=zf.entries();
           while(e.hasMoreElements()){
        ZipEntry ze2=(ZipEntry)e.nextElement();
        System.out.println("&Ntilde;&sup1;&Euml;&otilde;&Iacute;ê&sup3;&Eacute;&pound;&not;&Ntilde;&sup1;&Euml;&otilde;&Icirc;&Auml;&frac14;&thorn;±&pound;&acute;&aelig;&Ocirc;&Uacute;&pound;&ordm;"+ 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("&Acirc;·&frac34;&para;"+sPath+"&Icirc;&Auml;&frac14;&thorn;&Atilde;&ucirc;"+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");
  }
}