code: private synchronized boolean addToZipFileSystem(Path zipFile, File[] files, Path pathWithinArchive) {
  		boolean ret = false;
  
  		/* URIs in Java 7 cannot have spaces, must use Path instead
  		 * and so, cannot use the properties map to describe need to create
  		 * a new zip archive.  ZipChemCompProvider.initilizeZip to creates the
  		 * missing zip file */
  
  		/*
  		// convert the filename to a URI
  		String uriString = "jar:file:" + zipFile.toUri().getPath();
  		final URI uri = URI.create(uriString);
  
  		// if filesystem doesn't exist, create one.
  		final Map<String, String> env = new HashMap<>();
  		// Create a new zip if one isn't present.
  		if (!zipFile.toFile().exists()) {
  			System.out.println("Need to create " + zipFile.toString());
  		}
  		env.put("create", String.valueOf(!zipFile.toFile().exists()));
  		// Specify the encoding as UTF -8
  		env.put("encoding", "UTF-8");
  		*/
  
  		// Copy in each file.
  		try (FileSystem zipfs = FileSystems.newFileSystem(zipFile, null)) {
  			Files.createDirectories(pathWithinArchive);
  			for (File f : files) {
  				if (!f.isDirectory() && f.exists()) {
  					Path externalFile = f.toPath();
  					Path pathInZipFile = zipfs.getPath(pathWithinArchive.resolve(f.getName()).toString());
  					Files.copy(externalFile, pathInZipFile,
  							StandardCopyOption.REPLACE_EXISTING);
  				}
  			}
  			ret = true;
  		} catch (IOException ex) {
  			s_logger.error("Unable to add entries to Chemical Component zip archive : " + ex.getMessage());
  			ret = false;
  		}
  		return ret;
  	}
docs: Add an array of files to a zip archive.
  Synchronized to prevent simultaneous reading/writing.
  
  @param zipFile is a destination zip archive
  @param files is an array of files to be added
  @param pathWithinArchive is the path within the archive to add files to
  @return true if successfully appended these files.