import net.lingala.zip4j.io.outputstream.ZipOutputStream; import net.lingala.zip4j.model.ZipParameters; import net.lingala.zip4j.model.enums.AesKeyStrength; import net.lingala.zip4j.model.enums.CompressionMethod; import net.lingala.zip4j.model.enums.EncryptionMethod; import java.io.FileOutputStream; import java.io.FileInputStream; import java.io.InputStream; import java.io.File; import java.io.IOException; import java.util.Arrays; import java.util.List; public class SampleClass{ public static void main(String[] args) throws IOException{ try(ZipOutputStream zos = new ZipOutputStream( new FileOutputStream( new File("myzip.zip")), "password".toCharArray())){ ZipParameters zp = new ZipParameters(); zp.setCompressionMethod (CompressionMethod.STORE); zp.setEncryptFiles(true); zp.setEncryptionMethod (EncryptionMethod.AES); zp.setAesKeyStrength (AesKeyStrength.KEY_STRENGTH_256); List<FilesToAdd> filesToAdd = Arrays.asList( new FilesToAdd (new File("folder/img1.jpg"), zp), new FilesToAdd (new File("folder/img2.jpg"), zp), new FilesToAdd (new File("folder/img3.jpg"), zp) ); for(FilesToAdd fta : filesToAdd){ //Entry size(bytes) must be set if we want to use //STORE to be used as compression method in //an entry. // //DEFLATE compression doesn't have this //requirement if(fta.getZipParameters(). getCompressionMethod() == CompressionMethod.STORE) fta.getZipParameters(). setEntrySize(fta.getFile().length()); //This parameter must be set if we're sending //data to a zip file via stream fta.getZipParameters().setFileNameInZip (fta.getFile().getName()); zos.putNextEntry(fta.getZipParameters()); try(InputStream is = new FileInputStream(fta.getFile())){ is.transferTo(zos); } zos.closeEntry(); } } } } class FilesToAdd{ private File file; private ZipParameters zp; FilesToAdd(File file, ZipParameters zp){ this.file = file; this.zp = zp; } ZipParameters getZipParameters(){ return zp; } File getFile(){ return file; } }