How To ZIP File/Directory In Java?
Tags: java
Published: 2021-06-29 12:50:16

How To Zip A Single File In Java?

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
 
public class ZipFileJavaProgram 
{
    private static void zipSingleFile(String filePath) throws IOException
    {
        //Step 1 : Create a File fileToBeZipped with given filePath 
        //and wrap it into FileInputStream fis
         
        File fileToBeZipped = new File(filePath);
        FileInputStream fis = new FileInputStream(fileToBeZipped);
         
        //Step 2 : Create FileOutputStream fos with path to output file 
        //and wrap it into ZipOutputStream zos
         
        FileOutputStream fos = new FileOutputStream("I:\\ZippedFile.zip");
        ZipOutputStream zos = new ZipOutputStream(fos);
         
        //Step 3 : Create zipEntry with the name of fileToBeZipped
         
        ZipEntry zipEntry = new ZipEntry(fileToBeZipped.getName());
         
        //Step 4 : Read fis byte by byte into byte array bytes and 
        //write them into zos till the end of fis
         
        zos.putNextEntry(zipEntry); 
         
        byte[] bytes = new byte[1024];
         
        while (fis.read(bytes) >= 0)
        {
            zos.write(bytes, 0, bytes.length);
        }
         
        zos.closeEntry();
         
        //Step 5 : Close the resources
         
        fis.close();
        zos.close();
        fos.close();
    }
     
    public static void main(String[] args) throws IOException
    {
        String filePath = "I:\\TextFileOne.txt";
         
        zipSingleFile(filePath);
    }
}

How To Zip Multiple Files In Java?

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
 
public class ZipFileJavaProgram 
{
    private static void zipMultipleFiles(String... filePaths) throws IOException
    {
        //Step 1 : Creating FileOutputStream fos and ZipOutputStream zos
         
        FileOutputStream fos = new FileOutputStream("I:\\ZippedFile.zip");
        ZipOutputStream zos = new ZipOutputStream(fos);
         
        //Step 2 : Creating a List of filePaths
         
        List<String> filesToBeZipped = Arrays.asList(filePaths);
         
        FileInputStream fis;
         
        //Step 3 : Zipping each file in filesToBeZipped one by one
         
        for (String filePath : filesToBeZipped) 
        {
            File fileToBeZipped = new File(filePath);
            fis = new FileInputStream(fileToBeZipped);
             
            ZipEntry zipEntry = new ZipEntry(fileToBeZipped.getName());
             
            zos.putNextEntry(zipEntry);
             
            byte[] bytes = new byte[1024];
             
            while (fis.read(bytes) >= 0)
            {
                zos.write(bytes, 0, bytes.length);
            }
             
            zos.closeEntry();
            fis.close();
        }
         
        //Step 4 : Close the resources
         
        zos.close();
        fos.close();
    }
     
    public static void main(String[] args) throws IOException
    {
        String[] filePaths = new String[] {"I:\\TextFileOne.txt", "I:\\TextFileTwo.txt", "I:\\TextFileThree.txt"} ;
         
        zipMultipleFiles(filePaths);
    }
}

How To Zip A Whole Directory In Java?

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
 
public class ZipFileJavaProgram 
{
    //Method to ZIP single file
     
    private static void zipSingleFile(String filePath, ZipOutputStream zos) throws IOException
    {
        File fileToBeZipped = new File(filePath);
        FileInputStream fis = new FileInputStream(fileToBeZipped);
         
        ZipEntry zipEntry = new ZipEntry(filePath);
         
        zos.putNextEntry(zipEntry); 
         
        byte[] bytes = new byte[1024];
         
        while (fis.read(bytes) >= 0)
        {
            zos.write(bytes, 0, bytes.length);
        }
         
        zos.closeEntry();
         
        fis.close();
    }
     
    //Method To ZIP Whole directory
     
    private static void zipWholeDirectory(String filePath, ZipOutputStream zos) throws IOException
    {
        File fileToBeZipped = new File(filePath);
         
        if(fileToBeZipped.isDirectory())
        {
            File[] files = fileToBeZipped.listFiles();
             
            for (File file : files) 
            {
                zipWholeDirectory(filePath+"\\"+file.getName(), zos);
            }           
        }
        else
        {
            zipSingleFile(filePath, zos);
        }
    }
     
    public static void main(String[] args) throws IOException
    {
        //Step 1 : Let filePath be the path of the directory to be zipped
         
        String filePath = "I:\\Java\\jdk1.8.0_181\\src";
         
        //Step 2 : Creating FileOutputStream and ZipOutputStream
 
        FileOutputStream fos = new FileOutputStream("I:\\ZippedFile.zip");
        ZipOutputStream zos = new ZipOutputStream(fos);
         
        //Step 3 : Call to zipWholeDirectory() 
         
        zipWholeDirectory(filePath, zos);
         
        //Step 4 : Close the resources
         
        zos.close();
        fos.close();
    }
}

Source : https://javaconceptoftheday.com/how-to-zip-file-directory-in-java/