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 ( ) ; }
Download an archive this will NOT overwrite a previously existing file .