Java : ZipFile with Examples
ZipFile (Java SE 19 & JDK 19) API Examples.
You will find code examples on most ZipFile methods.
Summary
This class is used to read entries from a zip file.
final var path = Path.of("R:", "java-work", "aaa.zip");
System.out.println(path); // R:\java-work\aaa.zip
// --------
// Compression
try (final var zos = new ZipOutputStream(Files.newOutputStream(path))) {
zos.putNextEntry(new ZipEntry("bbb.txt"));
zos.write("YYYYY".getBytes());
zos.putNextEntry(new ZipEntry("ccc.txt"));
zos.write("ZZZZZ".getBytes());
}
// --- PowerShell ---
//PS R:\java-work> ls -name
//aaa.zip
//
//PS R:\java-work> Expand-Archive .\aaa.zip .
//PS R:\java-work> ls -name
//aaa.zip
//bbb.txt
//ccc.txt
//
//PS R:\java-work> cat .\bbb.txt
//YYYYY
//PS R:\java-work> cat .\ccc.txt
//ZZZZZ
// --------
// Decompression
try (final var zipFile = new ZipFile(path.toFile())) {
zipFile.stream().forEach(entry -> {
System.out.println("-- entry --");
System.out.println("name : " + entry.getName());
try (final var is = zipFile.getInputStream(entry)) {
final var uncompressed = is.readAllBytes();
System.out.println("uncompressed : " + new String(uncompressed));
} catch (IOException e) {
System.out.println(e.getMessage());
}
});
// Result
// ↓
//-- entry --
//name : bbb.txt
//uncompressed : YYYYY
//-- entry --
//name : ccc.txt
//uncompressed : ZZZZZ
}
Fields
static final int CENATT
Central directory (CEN) header internal file attributes field offset.
System.out.println(ZipFile.CENATT); // 36
static final int CENATX
Central directory (CEN) header external file attributes field offset.
System.out.println(ZipFile.CENATX); // 38
static final int CENCOM
Central directory (CEN) header comment length field offset.
System.out.println(ZipFile.CENCOM); // 32
static final int CENCRC
Central directory (CEN) header uncompressed file crc-32 value field offset.
System.out.println(ZipFile.CENCRC); // 16
static final int CENDSK
Central directory (CEN) header disk number start field offset.
System.out.println(ZipFile.CENDSK); // 34
static final int CENEXT
Central directory (CEN) header extra field length field offset.
System.out.println(ZipFile.CENEXT); // 30
static final int CENFLG
Central directory (CEN) header encrypt, decrypt flags field offset.
System.out.println(ZipFile.CENFLG); // 8
static final int CENHDR
Central directory (CEN) header size in bytes (including signature).
System.out.println(ZipFile.CENHDR); // 46
static final int CENHOW
Central directory (CEN) header compression method field offset.
System.out.println(ZipFile.CENHOW); // 10
static final int CENLEN
Central directory (CEN) header uncompressed size field offset.
System.out.println(ZipFile.CENLEN); // 24
static final int CENNAM
Central directory (CEN) header filename length field offset.
System.out.println(ZipFile.CENNAM); // 28
static final int CENOFF
Central directory (CEN) header LOC header offset field offset.
System.out.println(ZipFile.CENOFF); // 42
static final long CENSIG
Central directory (CEN) header signature.
System.out.printf("%#x", ZipEntry.CENSIG); // 0x2014b50
static final int CENSIZ
Central directory (CEN) header compressed size field offset.
System.out.println(ZipFile.CENSIZ); // 20
static final int CENTIM
Central directory (CEN) header modification time field offset.
System.out.println(ZipFile.CENTIM); // 12
static final int CENVEM
Central directory (CEN) header version made by field offset.
System.out.println(ZipFile.CENVEM); // 4
static final int CENVER
Central directory (CEN) header version needed to extract field offset.
System.out.println(ZipFile.CENVER); // 6
static final int ENDCOM
End of central directory (END) header zip file comment length field offset.
System.out.println(ZipFile.ENDCOM); // 20
static final int ENDHDR
End of central directory (END) header size in bytes (including signature).
System.out.println(ZipFile.ENDHDR); // 22
static final int ENDOFF
End of central directory (END) header offset for the first CEN header field offset.
System.out.println(ZipFile.ENDOFF); // 16
static final long ENDSIG
End of central directory (END) header signature.
System.out.printf("%#x", ZipEntry.ENDSIG); // 0x6054b50
static final int ENDSIZ
End of central directory (END) header central directory size in bytes field offset.
System.out.println(ZipFile.ENDSIZ); // 12
static final int ENDSUB
End of central directory (END) header number of entries on this disk field offset.
System.out.println(ZipFile.ENDSUB); // 8
static final int ENDTOT
End of central directory (END) header total number of entries field offset.
System.out.println(ZipFile.ENDTOT); // 10
static final int EXTCRC
Extra local (EXT) header uncompressed file crc-32 value field offset.
System.out.println(ZipFile.EXTCRC); // 4
static final int EXTHDR
Extra local (EXT) header size in bytes (including signature).
System.out.println(ZipFile.EXTHDR); // 16
static final int EXTLEN
Extra local (EXT) header uncompressed size field offset.
System.out.println(ZipFile.EXTLEN); // 12
static final long EXTSIG
Extra local (EXT) header signature.
System.out.printf("%#x", ZipEntry.EXTSIG); // 0x8074b50
static final int EXTSIZ
Extra local (EXT) header compressed size field offset.
System.out.println(ZipFile.EXTSIZ); // 8
static final int LOCCRC
Local file (LOC) header uncompressed file crc-32 value field offset.
System.out.println(ZipFile.LOCCRC); // 14
static final int LOCEXT
Local file (LOC) header extra field length field offset.
System.out.println(ZipFile.LOCEXT); // 28
static final int LOCFLG
Local file (LOC) header general purpose bit flag field offset.
System.out.println(ZipFile.LOCFLG); // 6
static final int LOCHDR
Local file (LOC) header size in bytes (including signature).
System.out.println(ZipFile.LOCHDR); // 30
static final int LOCHOW
Local file (LOC) header compression method field offset.
System.out.println(ZipFile.LOCHOW); // 8
static final int LOCLEN
Local file (LOC) header uncompressed size field offset.
System.out.println(ZipFile.LOCLEN); // 22
static final int LOCNAM
Local file (LOC) header filename length field offset.
System.out.println(ZipFile.LOCNAM); // 26
static final long LOCSIG
Local file (LOC) header signature.
System.out.printf("%#x", ZipEntry.LOCSIG); // 0x4034b50
static final int LOCSIZ
Local file (LOC) header compressed size field offset.
System.out.println(ZipFile.LOCSIZ); // 18
static final int LOCTIM
Local file (LOC) header modification time field offset.
System.out.println(ZipFile.LOCTIM); // 10
static final int LOCVER
Local file (LOC) header version needed to extract field offset.
System.out.println(ZipFile.LOCVER); // 4
static final int OPEN_DELETE
Mode flag to open a zip file and mark it for deletion.
System.out.println(ZipFile.OPEN_DELETE); // 4
static final int OPEN_READ
Mode flag to open a zip file for reading.
System.out.println(ZipFile.OPEN_READ); // 1
Constructors
ZipFile (File file)
Opens a ZIP file for reading given the specified File object.
final var path = Path.of("R:", "java-work", "aaa.zip");
System.out.println(path); // R:\java-work\aaa.zip
try (final var zos = new ZipOutputStream(Files.newOutputStream(path))) {
zos.putNextEntry(new ZipEntry("bbb.txt"));
zos.write("YYYYY".getBytes());
}
try (final var zipFile = new ZipFile(path.toFile())) {
zipFile.stream().forEach(entry -> {
System.out.println("-- entry --");
System.out.println("name : " + entry.getName());
try (final var is = zipFile.getInputStream(entry)) {
final var uncompressed = is.readAllBytes();
System.out.println("uncompressed : " + new String(uncompressed));
} catch (IOException e) {
System.out.println(e.getMessage());
}
});
// Result
// ↓
//-- entry --
//name : bbb.txt
//uncompressed : YYYYY
}
ZipFile (File file, int mode)
Opens a new ZipFile to read from the specified File object in the specified mode.
final var path = Path.of("R:", "java-work", "aaa.zip");
System.out.println(path); // R:\java-work\aaa.zip
try (final var zos = new ZipOutputStream(Files.newOutputStream(path))) {
zos.putNextEntry(new ZipEntry("bbb.txt"));
zos.write("YYYYY".getBytes());
}
System.out.println(Files.exists(path)); // true
System.out.println(Files.size(path)); // 133
final int mode = ZipFile.OPEN_READ | ZipFile.OPEN_DELETE;
try (final var zipFile = new ZipFile(path.toFile(), mode)) {
zipFile.stream().forEach(entry -> {
System.out.println("-- entry --");
System.out.println("name : " + entry.getName());
try (final var is = zipFile.getInputStream(entry)) {
final var uncompressed = is.readAllBytes();
System.out.println("uncompressed : " + new String(uncompressed));
} catch (IOException e) {
System.out.println(e.getMessage());
}
});
// Result
// ↓
//-- entry --
//name : bbb.txt
//uncompressed : YYYYY
}
System.out.println(Files.exists(path)); // false
ZipFile (File file, int mode, Charset charset)
Opens a new ZipFile to read from the specified File object in the specified mode.
Please see :
- ZipFile(File file, int mode) for file, mode parameters.
- ZipFile(File file, Charset charset) for charset parameter.
ZipFile (File file, Charset charset)
Opens a ZIP file for reading given the specified File object.
Please see ZipFile(File file) for file parameter.
final var path = Path.of("R:", "java-work", "aaa.zip");
System.out.println(path); // R:\java-work\aaa.zip
final var charset = Charset.forName("Shift_JIS");
try (final var zos = new ZipOutputStream(Files.newOutputStream(path), charset)) {
zos.putNextEntry(new ZipEntry("bbb.txt"));
zos.putNextEntry(new ZipEntry("○△×.txt"));
}
try (final var zipFile = new ZipFile(path.toFile(), charset)) {
zipFile.stream().forEach(entry -> {
System.out.println("-- entry --");
System.out.println("name : " + entry.getName());
});
// Result
// ↓
//-- entry --
//name : bbb.txt
//-- entry --
//name : ○△×.txt
}
ZipFile (String name)
Opens a zip file for reading.
final var path = Path.of("R:", "java-work", "aaa.zip");
System.out.println(path); // R:\java-work\aaa.zip
try (final var zos = new ZipOutputStream(Files.newOutputStream(path))) {
zos.putNextEntry(new ZipEntry("bbb.txt"));
zos.write("YYYYY".getBytes());
}
final var name = path.toString();
System.out.println(name); // R:\java-work\aaa.zip
try (final var zipFile = new ZipFile(name)) {
zipFile.stream().forEach(entry -> {
System.out.println("-- entry --");
System.out.println("name : " + entry.getName());
try (final var is = zipFile.getInputStream(entry)) {
final var uncompressed = is.readAllBytes();
System.out.println("uncompressed : " + new String(uncompressed));
} catch (IOException e) {
System.out.println(e.getMessage());
}
});
// Result
// ↓
//-- entry --
//name : bbb.txt
//uncompressed : YYYYY
}
ZipFile (String name, Charset charset)
Opens a zip file for reading.
Please see :
- ZipFile(String name) for name parameter.
- ZipFile(File file, Charset charset) for charset parameter.
Methods
void close ()
Closes the ZIP file.
final var path = Path.of("R:", "java-work", "aaa.zip");
System.out.println(path); // R:\java-work\aaa.zip
try (final var zos = new ZipOutputStream(Files.newOutputStream(path))) {
zos.putNextEntry(new ZipEntry("bbb.txt"));
}
try (final var zipFile = new ZipFile(path.toFile())) {
zipFile.stream().forEach(entry -> {
System.out.println("-- entry --");
System.out.println("name : " + entry.getName());
});
// Result
// ↓
//-- entry --
//name : bbb.txt
}
An example without try-with-resources.
final var path = Path.of("R:", "java-work", "aaa.zip");
System.out.println(path); // R:\java-work\aaa.zip
try (final var zos = new ZipOutputStream(Files.newOutputStream(path))) {
zos.putNextEntry(new ZipEntry("bbb.txt"));
}
final var zipFile = new ZipFile(path.toFile());
try {
zipFile.stream().forEach(entry -> {
System.out.println("-- entry --");
System.out.println("name : " + entry.getName());
});
// Result
// ↓
//-- entry --
//name : bbb.txt
} finally {
zipFile.close();
}
Enumeration<? extends ZipEntry> entries ()
Returns an enumeration of the ZIP file entries.
final var path = Path.of("R:", "java-work", "aaa.zip");
System.out.println(path); // R:\java-work\aaa.zip
try (final var zos = new ZipOutputStream(Files.newOutputStream(path))) {
zos.putNextEntry(new ZipEntry("bbb.txt"));
zos.putNextEntry(new ZipEntry("ccc.txt"));
}
try (final var zipFile = new ZipFile(path.toFile())) {
final var entries = zipFile.entries();
while (entries.hasMoreElements()) {
System.out.println("-- entry --");
final var entry = entries.nextElement();
System.out.println("name : " + entry.getName());
}
// Result
// ↓
//-- entry --
//name : bbb.txt
//-- entry --
//name : ccc.txt
}
String getComment ()
Returns the zip file comment, or null if none.
final var path = Path.of("R:", "java-work", "aaa.zip");
System.out.println(path); // R:\java-work\aaa.zip
try (final var zos = new ZipOutputStream(Files.newOutputStream(path))) {
zos.setComment("comment!");
}
try (final var zipFile = new ZipFile(path.toFile())) {
System.out.println(zipFile.getName()); // R:\java-work\aaa.zip
System.out.println(zipFile.getComment()); // comment!
}
ZipEntry getEntry (String name)
Returns the zip file entry for the specified name, or null if not found.
final var path = Path.of("R:", "java-work", "aaa.zip");
System.out.println(path); // R:\java-work\aaa.zip
try (final var zos = new ZipOutputStream(Files.newOutputStream(path))) {
final var entry1 = new ZipEntry("bbb.txt");
entry1.setComment("BBB!");
zos.putNextEntry(entry1);
final var entry2 = new ZipEntry("ccc.txt");
entry2.setComment("CCC!");
zos.putNextEntry(entry2);
}
try (final var zipFile = new ZipFile(path.toFile())) {
final var entry1 = zipFile.getEntry("bbb.txt");
if (entry1 != null) {
System.out.println(entry1.getName()); // bbb.txt
System.out.println(entry1.getComment()); // BBB!
}
final var entry2 = zipFile.getEntry("ccc.txt");
if (entry2 != null) {
System.out.println(entry2.getName()); // ccc.txt
System.out.println(entry2.getComment()); // CCC!
}
}
InputStream getInputStream (ZipEntry entry)
Returns an input stream for reading the contents of the specified zip file entry.
final var path = Path.of("R:", "java-work", "aaa.zip");
System.out.println(path); // R:\java-work\aaa.zip
try (final var zos = new ZipOutputStream(Files.newOutputStream(path))) {
zos.putNextEntry(new ZipEntry("bbb.txt"));
zos.write("YYYYY".getBytes());
zos.putNextEntry(new ZipEntry("ccc.txt"));
zos.write("ZZZZZ".getBytes());
}
try (final var zipFile = new ZipFile(path.toFile())) {
zipFile.stream().forEach(entry -> {
System.out.println("-- entry --");
System.out.println("name : " + entry.getName());
try (final var is = zipFile.getInputStream(entry)) {
final var uncompressed = is.readAllBytes();
System.out.println("uncompressed : " + new String(uncompressed));
} catch (IOException e) {
System.out.println(e.getMessage());
}
});
// Result
// ↓
//-- entry --
//name : bbb.txt
//uncompressed : YYYYY
//-- entry --
//name : ccc.txt
//uncompressed : ZZZZZ
}
String getName ()
Returns the path name of the ZIP file.
Please see getComment().
int size ()
Returns the number of entries in the ZIP file.
final var path = Path.of("R:", "java-work", "aaa.zip");
System.out.println(path); // R:\java-work\aaa.zip
try (final var zos = new ZipOutputStream(Files.newOutputStream(path))) {
zos.putNextEntry(new ZipEntry("bbb.txt"));
zos.putNextEntry(new ZipEntry("ccc.txt"));
zos.putNextEntry(new ZipEntry("ddd.txt"));
}
try (final var zipFile = new ZipFile(path.toFile())) {
System.out.println("entry size : " + zipFile.size());
zipFile.stream().forEach(entry -> {
System.out.println("-- entry --");
System.out.println("name : " + entry.getName());
});
// Result
// ↓
//entry size : 3
//-- entry --
//name : bbb.txt
//-- entry --
//name : ccc.txt
//-- entry --
//name : ddd.txt
}
Stream<? extends ZipEntry> stream ()
Returns an ordered Stream over the ZIP file entries.
Please see size().