1+ package com .baeldung .zip ;
2+
3+ import java .io .File ;
4+ import java .io .FileInputStream ;
5+ import java .io .FileOutputStream ;
6+ import java .io .IOException ;
7+ import java .util .zip .ZipEntry ;
8+ import java .util .zip .ZipOutputStream ;
9+
10+ public class ZipDirectory {
11+ public static void main (final String [] args ) throws IOException {
12+ final String sourceFile = "src/main/resources/zipTest" ;
13+ final FileOutputStream fos = new FileOutputStream ("src/main/resources/dirCompressed.zip" );
14+ final ZipOutputStream zipOut = new ZipOutputStream (fos );
15+ final File fileToZip = new File (sourceFile );
16+
17+ zipFile (fileToZip , fileToZip .getName (), zipOut );
18+ zipOut .close ();
19+ fos .close ();
20+ }
21+
22+ private static void zipFile (final File fileToZip , final String fileName , final ZipOutputStream zipOut ) throws IOException {
23+ if (fileToZip .isHidden ()) {
24+ return ;
25+ }
26+ if (fileToZip .isDirectory ()) {
27+ final File [] children = fileToZip .listFiles ();
28+ for (final File childFile : children ) {
29+ zipFile (childFile , fileName + "/" + childFile .getName (), zipOut );
30+ }
31+ return ;
32+ }
33+ final FileInputStream fis = new FileInputStream (fileToZip );
34+ final ZipEntry zipEntry = new ZipEntry (fileName );
35+ zipOut .putNextEntry (zipEntry );
36+ final byte [] bytes = new byte [1024 ];
37+ int length ;
38+ while ((length = fis .read (bytes )) >= 0 ) {
39+ zipOut .write (bytes , 0 , length );
40+ }
41+ fis .close ();
42+ }
43+ }
0 commit comments