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 } }
here is the code for the method