private void zipDir(String dir2zip, ZipOutputStream zos) throws IOException
  {
    try
    {
      //create a new File object based on the directory we have to zip.
      File zipDir = new File(dir2zip);
      //get a listing of the directory content
      String[] dirList = zipDir.list();
      byte[] readBuffer = new byte[4096];
      int bytesIn = 0;
      //loop through dirList, and zip the files
      for(int i=0; i<dirList.length; i++)
      {
        File f = new File(zipDir, dirList[i]);
        if(f.isDirectory())
        {
          //if the File object is a directory, call this
          //function again to add its content recursively
          String filePath = f.getPath();
          zipDir(filePath, zos);
          //loop again
          continue;
        }
        //if we reached here, the File object f was not a directory
        //create a FileInputStream on top of f
        FileInputStream fis = new FileInputStream(f);
        // create a new zip entry
        ZipEntry anEntry = new ZipEntry(f.getPath());
        anEntry.setTime(f.lastModified());
        //place the zip entry in the ZipOutputStream object
        zos.putNextEntry(anEntry);
        //now write the content of the file to the ZipOutputStream

        boolean stopEarlyBecauseTooMuchData = false;
        while((bytesIn = fis.read(readBuffer)) != -1)
        {
          zos.write(readBuffer, 0, bytesIn);
          if (baos.size() > MAX_SIZE) {
            stopEarlyBecauseTooMuchData = true;
            break;
          }
        }
        //close the Stream
        fis.close();
        zos.closeEntry();

        if (stopEarlyBecauseTooMuchData) {
          Log.warn("LogCollectorTask stopEarlyBecauseTooMuchData");
          break;
        }
      }
    }
    catch(Exception e)
    {
      //handle exception
    }
  }
private void zipDir ( String dir2zip , ZipOutputStream zos ) throws IOException { try { File zipDir = new File ( dir2zip ) ; String [ ] dirList = zipDir . list ( ) ; byte [ ] readBuffer = new byte [ 4096 ] ; int bytesIn = 0 ; for ( int i = 0 ; i < dirList . length ; i ++ ) { File f = new File ( zipDir , dirList [ i ] ) ; if ( f . isDirectory ( ) ) { String filePath = f . getPath ( ) ; zipDir ( filePath , zos ) ; continue ; } FileInputStream fis = new FileInputStream ( f ) ; ZipEntry anEntry = new ZipEntry ( f . getPath ( ) ) ; anEntry . setTime ( f . lastModified ( ) ) ; zos . putNextEntry ( anEntry ) ; boolean stopEarlyBecauseTooMuchData = false ; while ( ( bytesIn = fis . read ( readBuffer ) ) != - 1 ) { zos . write ( readBuffer , 0 , bytesIn ) ; if ( baos . size ( ) > MAX_SIZE ) { stopEarlyBecauseTooMuchData = true ; break ; } } fis . close ( ) ; zos . closeEntry ( ) ; if ( stopEarlyBecauseTooMuchData ) { Log . warn ( "LogCollectorTask stopEarlyBecauseTooMuchData" ) ; break ; } } } catch ( Exception e ) { } }
here is the code for the method