You have to be sure to add a CRC32 for uncompressed files added to a zip. Check out the example here.
http://jcsnippets.atspace.com/java/input-output/create-zip-file.html
You can do it in a simple way, without rewriting everything, with Zip4j.
Here it shows:
http://blog.michalszalkowski.com/java/zip4j-add-file-to-existing-zip-file/
And you can do it using Zip4J's ZipOutputStream too, using SplitOutputStream together.
<dependency>
<groupId>net.lingala.zip4j</groupId>
<artifactId>zip4j</artifactId>
<version>1.3.1</version>
</dependency>
ex:
ZipFile zipFile = new ZipFile(new File("/home/szalek/zip/core1.zip"));
ArrayList filesToAdd = new ArrayList();
filesToAdd.add(new File("/home/szalek/zip/someData.txt"));
ZipParameters parameters = new ZipParameters();
parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
//password
parameters.setEncryptFiles(true);
parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_STANDARD);
parameters.setPassword("test123!");
//password
zipFile.addFiles(filesToAdd, parameters);