code: protected void writeToArchive(File[] sources, ArchiveOutputStream archive) throws IOException {
          for (File source : sources) {
              if (!source.exists()) {
                  throw new FileNotFoundException(source.getPath());
              } else if (!source.canRead()) {
                  throw new FileNotFoundException(source.getPath() + " (Permission denied)");
              }
  
              writeToArchive(source.getParentFile(), new File[]{ source }, archive);
          }
      }
docs: Recursion entry point for {@link #writeToArchive(File, File[], ArchiveOutputStream)}.
  <br>
  Recursively writes all given source {@link File}s into the given {@link ArchiveOutputStream}.
  
  @param sources the files to write in to the archive
  @param archive the archive to write into
  @throws IOException when an I/O error occurs