ZIP *** http://javaalmanac.com/egs/java.util.zip/CreateZip.html :: /** Buffer size. */ static final int BUFFER_SIZE = 1024; /** * Zip the list of files... * * @param archiveFile Add the files to this archive. * @param fileList The list of files to add to the zip. * @param folderToRemove Remove this section of the path from the filename. * @throws MyException If the zip file cannot be created. */ public void zip(final File archiveFile, final List fileList, final File folderToRemove) throws MyException { // Create a buffer for reading the files byte[] buf = new byte[BUFFER_SIZE]; try { // Create the zip file ZipOutputStream out = new ZipOutputStream(new FileOutputStream(archiveFile)); for (Iterator i = fileList.iterator(); i.hasNext();) { File file = (File) i.next(); FileInputStream in = new FileInputStream(file); // Add zip entry to output stream. out.putNextEntry(new ZipEntry(getArchivePath(folderToRemove, file))); // Transfer bytes from the file to the ZIP file int len; while ((len = in.read(buf)) > 0) { out.write(buf, 0, len); } // Complete the entry out.closeEntry(); in.close(); } // Close the zip file out.close(); } catch (IOException e) { throw new MyException("Cannot create zip file [" + archiveFile.getAbsoluteFile() + "]"); } } /** * Get the file name as it should appear in the archive. * * @param folderToRemove Remove this section of the path from the filename. * @param file Get the archive path for this file. * @return The file name as it should appear in the archive. * @throws MyException If the file is not on the path. */ private String getArchivePath(final File folderToRemove, final File file) throws MyException { String remove = folderToRemove.getAbsolutePath(); String fileName = file.getAbsoluteFile().toString(); if (remove.length() >= fileName.length()) { throw new MyException("The path to remove [" + remove + "] is longer than the file [" + fileName + "]"); } if (fileName.indexOf(remove) != 0) { throw new MyException("The path to remove [" + remove + "] does not match the start of the file name [" + fileName + "]"); } String result = fileName.substring(remove.length() + 1); logger.info("getArchivePath() [" + result + "]"); return result; }