code: public void download() throws IOException, InterruptedException {
      if (!Files.exists(destinationFile.getParent())) {
        Files.createDirectories(destinationFile.getParent());
      }
  
      if (Files.exists(destinationFile)) {
        throw new FileAlreadyExistsException(destinationFile.toString());
      }
      URLConnection connection = address.openConnection();
      connection.setRequestProperty("User-Agent", userAgentString);
  
      try (InputStream in = connection.getInputStream()) {
        // note : contentLength can potentially be -1 if it is unknown.
        long contentLength = connection.getContentLengthLong();
  
        logger.info("Downloading " + address + " to " + destinationFile);
  
        try (BufferedOutputStream out =
            new BufferedOutputStream(
                Files.newOutputStream(destinationFile, StandardOpenOption.CREATE_NEW))) {
  
          progressListener.start(
              getDownloadStatus(contentLength, Locale.getDefault()), contentLength);
  
          int bytesRead;
          byte[] buffer = new byte[BUFFER_SIZE];
  
          while ((bytesRead = in.read(buffer)) != -1) {
            if (Thread.currentThread().isInterrupted()) {
              logger.warning("Download was interrupted\n");
              cleanUp();
              throw new InterruptedException("Download was interrupted");
            }
  
            out.write(buffer, 0, bytesRead);
            progressListener.update(bytesRead);
          }
        }
      }
      progressListener.done();
    }
docs: Download an archive, this will NOT overwrite a previously existing file.