Reputation: 2673
Is there an easy way to recursively ZIP a directory that may or may not contain any number of files and any number of levels of subdirectories?
Upvotes: 3
Views: 7701
Reputation: 18570
You can use the Java API Specification and How do you recursively traverse through file folders?.
Upvotes: 1
Reputation: 11831
I use the ZipFileSystem implementation in ruby with great success, though I've never used it in java. You might want to check this out:
Upvotes: -2
Reputation: 26169
public final class ZipFileUtil {
public static void zipDirectory(File dir, File zipFile) throws IOException {
FileOutputStream fout = new FileOutputStream(zipFile);
ZipOutputStream zout = new ZipOutputStream(fout);
zipSubDirectory("", dir, zout);
zout.close();
}
private static void zipSubDirectory(String basePath, File dir, ZipOutputStream zout) throws IOException {
byte[] buffer = new byte[4096];
File[] files = dir.listFiles();
for (File file : files) {
if (file.isDirectory()) {
String path = basePath + file.getName() + "/";
zout.putNextEntry(new ZipEntry(path));
zipSubDirectory(path, file, zout);
zout.closeEntry();
} else {
FileInputStream fin = new FileInputStream(file);
zout.putNextEntry(new ZipEntry(basePath + file.getName()));
int length;
while ((length = fin.read(buffer)) > 0) {
zout.write(buffer, 0, length);
}
zout.closeEntry();
fin.close();
}
}
}
}
Upvotes: 12