java create zip from directory code example
Example: Java create zip file
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class zip {
public static void main(String[] args) {
zipFolder(mapFolder("Test"));
System.out.println("Done");
}
public static List<String> mapFolder(String path, boolean includeEmptyFolders) {
List<String> map = new ArrayList<String>();
List<String> unmappedDirs = new ArrayList<String>();
File[] items = new File(path).listFiles();
if (!path.substring(path.length() - 1).equals("/")) {
path += "/";
}
if (items != null) {
for (File item : items) {
if (item.isFile()) {
map.add(path+item.getName());
} else {
unmappedDirs.add(path+item.getName());
}
}
if (!unmappedDirs.isEmpty()) {
for (String folder : unmappedDirs) {
List<String> temp = mapFolder(folder, includeEmptyFolders);
if (!temp.isEmpty()) {
for (String item : temp)
map.add(item);
} else if (includeEmptyFolders == true) {
map.add(folder+"/");
}
}
}
}
return map;
}
public static void zipFolder(String zipPath, List<String> items) {
try {
FileOutputStream f = new FileOutputStream(zipPath);
ZipOutputStream zip = new ZipOutputStream(new BufferedOutputStream(f));
for (String item : items) {
String contents = String.join("\n", Files.readAllLines(Paths.get(item)));
zip.putNextEntry(new ZipEntry(item));
byte[] data = contents.getBytes();
zip.write(data, 0, data.length);
zip.closeEntry();
}
zip.close();
f.close();
} catch(Exception e) {
System.out.println(e.getMessage());
}
}
}