ZIP API in Java
The Java API for ZIP files is a set of classes and interfaces that allow you to create, read, and write ZIP files. The API is part of the Java standard library, so you need not download additional JAR files.
Features of ZIP API
- To use the ZIP API, you must first create a ZipFile object. This object represents the ZIP file you want to create, read, or write. Once you have started a ZipFile object, you can add files to the ZIP file, remove files from the ZIP file, and get a list of the files in the ZIP file.
- To add a file to a ZIP file, you use the addFile() method. This method takes the file name you want to add as its argument. The file will be added to the ZIP file with its current name.
- To remove a file from a ZIP file, you use the removeFile() method. This method takes the file name you want to remove as its argument. The file will be removed from the ZIP file if it exists.
- To get a list of the files in a ZIP file, you use the getEntries() method. This method returns an Enumeration of ZipEntry objects. Each ZipEntry object represents a file in the ZIP file.
- The ZIP API also provides several other methods that you can use to manipulate ZIP files. For example, you can use the getComment() method to get the comment for a ZIP file and the setComment() method to set the comment for a ZIP file.
The ZIP API is a powerful tool that can be used to create, read, and write ZIP files. The API is easy to use, and it is well-documented.
As usual, we will start by discussing constructors before moving on to methods and finally putting the ZIP API into effect. Beginning with the constructors, let us do the following:
Constructors
- Default constructor: The default constructor creates a zip entry with the given name and accepts a string argument called name.
ZipEntry() {}
- Parameterized constructor: A new zip entry gets created by using the specified file
File file: For opening and reading ZIP files for a specified file object
ZipFile(File) {}
For opening and reading ZIP files for a specified file object
ZipFile(File file, Charset charset) {{}
Methods
Now let us discuss methods which are as follows:
Method 1: getEntry(): Tells zip file entry for the specified name, or null if not found.
Syntax:
getEntry()
Return type: ZipEntry
Parameters: String name
Method 2: getInputStream():- Used to get the input stream for reading the contents of specified zip entries.
Syntax:
getNextEntry()
Return type: InputStream
parameters: ZipEntry zipEntry
Method 3: putNextentry(): Starts writing a new ZIP file entry. Then, it positions the stream to the start of entry data.
Syntax:
putNextentry() {}
Return Type: Void
Parameters: ZipEntry e
Implementation
Let us understand Java Program to Illustrate ZIP API in order to zip a file.
Filename: ZIPAPI.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 ZIPAPI {
public static void main(String[] args) {
// Source file to be zipped
String sourceFilePath = "example.txt";
// Destination ZIP file
String zipFilePath = "example.zip";
try {
// Creating a ZipOutputStream to write to the zip file
FileOutputStream fos = new FileOutputStream(zipFilePath);
ZipOutputStream zipOut = new ZipOutputStream(fos);
// Creating a ZipEntry for the source file
ZipEntry zipEntry = new ZipEntry(new File(sourceFilePath).getName());
zipOut.putNextEntry(zipEntry);
// Reading the contents of the source file and writing to the zip file
FileInputStream fis = new FileInputStream(sourceFilePath);
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = fis.read(buffer)) > 0) {
zipOut.write(buffer, 0, bytesRead);
}
// Closing resources
fis.close();
zipOut.close();
fos.close();
System.out.println("File successfully zipped!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
Output:
File successfully zipped!
The following Java program illustrates how to unzip a file using ZIP API.
Filename: UnzipAPI.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.ZipInputStream;
public class UnzipAPI {
public static void main(String[] args) {
// Path to the ZIP file
String zipFilePath = "example.zip";
// Directory to extract the contents to
String extractToDirectory = "extracted_files";
try {
// Creating a ZipInputStream to read from the zip file
ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipFilePath));
// Creating the output directory if it doesn't exist
File directory = new File(extractToDirectory);
if (!directory.exists()) {
directory.mkdir();
}
// Iterating through each entry in the zip file
ZipEntry entry = zipIn.getNextEntry();
while (entry != null) {
// Creating a new file in the output directory
String filePath = extractToDirectory + File.separator + entry.getName();
File outFile = new File(filePath);
// Creating directories if they don't exist
if (entry.isDirectory()) {
outFile.mkdirs();
} else {
// Writing the contents of the entry to the file
FileOutputStream fos = new FileOutputStream(outFile);
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = zipIn.read(buffer)) != -1) {
fos.write(buffer, 0, bytesRead);
}
fos.close();
}
// Moving to the next entry
zipIn.closeEntry();
entry = zipIn.getNextEntry();
}
// Closing resources
zipIn.close();
System.out.println("File successfully unzipped to: " + extractToDirectory);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Output:
File successfully unzipped to: extracted_files