code: public Download download(String bucket, String key,
                               File file, long timeoutMillis) {
          return download(new GetObjectRequest(bucket, key), file,
                  timeoutMillis);
      }
docs: Schedules a new transfer to download data from Amazon S3 and save it to
  the specified file. This method is non-blocking and returns immediately
  (i.e. before the data has been fully downloaded).
  <p>
  Use the returned Download object to query the progress of the transfer,
  add listeners for progress events, and wait for the download to complete.
  </p>
  <p>
  If you are downloading <a href="http://aws.amazon.com/kms/">AWS
  KMS</a>-encrypted objects, you need to specify the correct region of the
  bucket on your client and configure AWS Signature Version 4 for added
  security. For more information on how to do this, see
  http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#
  specify-signature-version
  </p>
  
  @param bucket
  The name of the bucket containing the object to download.
  @param key
  The key under which the object to download is stored.
  @param file
  The file to download the object's data to.
  @param timeoutMillis
  Timeout, in milliseconds, for waiting for this download to
  complete.  Note that the timeout time will be approximate
  and is not strictly guaranteed.  As a result this timeout
  should not be relied on in cases where exact precision is
  required.
  
  @return A new <code>Download</code> object to use to check the state of
  the download, listen for progress notifications, and otherwise
  manage the download.
  
  @throws AmazonClientException
  If any errors are encountered in the client while making the
  request or handling the response.
  @throws AmazonServiceException
  If any errors occurred in Amazon S3 while processing the
  request.