Here’s a complete file downloader example program with output, error checking, and command line argument checks:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
<span class="hljs-keyword">package</span> so.downloader; <span class="hljs-keyword">import</span> java.io.IOException; <span class="hljs-keyword">import</span> java.io.InputStream; <span class="hljs-keyword">import</span> java.net.MalformedURLException; <span class="hljs-keyword">import</span> java.net.URI; <span class="hljs-keyword">import</span> java.nio.file.Files; <span class="hljs-keyword">import</span> java.nio.file.Paths; <span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Application</span> </span>{ <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String[] args)</span> <span class="hljs-keyword">throws</span> MalformedURLException, IOException </span>{ <span class="hljs-keyword">if</span> (<span class="hljs-number">2</span> != args.length) { System.out.println(String.format(<span class="hljs-string">"USAGE: java -jar so-downloader.jar <source-URL> <target-filename>"</span>)); System.exit(<span class="hljs-number">1</span>); } String sourceUrl = args[<span class="hljs-number">0</span>]; String targetFilename = args[<span class="hljs-number">1</span>]; <span class="hljs-keyword">long</span> bytesDownloaded = download(sourceUrl, targetFilename); System.out.println(String.format(<span class="hljs-string">"Downloaded %d bytes from %s to %s."</span>, bytesDownloaded, sourceUrl, targetFilename)); } <span class="hljs-function"><span class="hljs-keyword">static</span> <span class="hljs-keyword">long</span> <span class="hljs-title">download</span><span class="hljs-params">(String sourceUrl, String targetFileName)</span> <span class="hljs-keyword">throws</span> MalformedURLException, IOException </span>{ <span class="hljs-keyword">try</span> (InputStream in = URI.create(sourceUrl).toURL().openStream()) { <span class="hljs-keyword">return</span> Files.copy(in, Paths.get(targetFileName)); } } } |
As noted in the so-downloader repository README:
To run file download program:
1 2 |
java -jar so-downloader.jar <source-URL> <target-filename> |
for example:
1 |
java -jar so-downloader.jar https:<span class="hljs-comment">//github.com/JanStureNielsen/so-downloader/archive/main.zip so-downloader-source.zip</span> |
When using Java 7+
use the following method to download a file from the Internet and save it to some directory:
1 2 3 4 5 6 7 8 9 10 |
<span class="hljs-function"><span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> Path <span class="hljs-title">download</span><span class="hljs-params">(String sourceURL, String targetDirectory)</span> <span class="hljs-keyword">throws</span> IOException </span>{ URL url = <span class="hljs-keyword">new</span> URL(sourceURL); String fileName = sourceURL.substring(sourceURL.lastIndexOf(<span class="hljs-string">'/'</span>) + <span class="hljs-number">1</span>, sourceURL.length()); Path targetPath = <span class="hljs-keyword">new</span> File(targetDirectory + File.separator + fileName).toPath(); Files.copy(url.openStream(), targetPath, StandardCopyOption.REPLACE_EXISTING); <span class="hljs-keyword">return</span> targetPath; } |
Documentation here.
Another method shown here
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">downloadFileFromURL</span><span class="hljs-params">(String urlString, File destination)</span> </span>{ <span class="hljs-keyword">try</span> { URL website = <span class="hljs-keyword">new</span> URL(urlString); ReadableByteChannel rbc; rbc = Channels.newChannel(website.openStream()); FileOutputStream fos = <span class="hljs-keyword">new</span> FileOutputStream(destination); fos.getChannel().transferFrom(rbc, <span class="hljs-number">0</span>, Long.MAX_VALUE); fos.close(); rbc.close(); } <span class="hljs-keyword">catch</span> (IOException e) { e.printStackTrace(); } } |
Another Complete java program to download file from server
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
<span class="hljs-keyword">import</span> java.io.*; <span class="hljs-keyword">import</span> java.net.*; <span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">filedown</span> </span>{ <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">download</span><span class="hljs-params">(String address, String localFileName)</span> </span>{ OutputStream out = <span class="hljs-keyword">null</span>; URLConnection conn = <span class="hljs-keyword">null</span>; InputStream in = <span class="hljs-keyword">null</span>; <span class="hljs-keyword">try</span> { URL url = <span class="hljs-keyword">new</span> URL(address); out = <span class="hljs-keyword">new</span> BufferedOutputStream(<span class="hljs-keyword">new</span> FileOutputStream(localFileName)); conn = url.openConnection(); in = conn.getInputStream(); <span class="hljs-keyword">byte</span>[] buffer = <span class="hljs-keyword">new</span> <span class="hljs-keyword">byte</span>[<span class="hljs-number">1024</span>]; <span class="hljs-keyword">int</span> numRead; <span class="hljs-keyword">long</span> numWritten = <span class="hljs-number">0</span>; <span class="hljs-keyword">while</span> ((numRead = in.read(buffer)) != -<span class="hljs-number">1</span>) { out.write(buffer, <span class="hljs-number">0</span>, numRead); numWritten += numRead; } System.out.println(localFileName + <span class="hljs-string">"\t"</span> + numWritten); } <span class="hljs-keyword">catch</span> (Exception exception) { exception.printStackTrace(); } <span class="hljs-keyword">finally</span> { <span class="hljs-keyword">try</span> { <span class="hljs-keyword">if</span> (in != <span class="hljs-keyword">null</span>) { in.close(); } <span class="hljs-keyword">if</span> (out != <span class="hljs-keyword">null</span>) { out.close(); } } <span class="hljs-keyword">catch</span> (IOException ioe) { } } } <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">download</span><span class="hljs-params">(String address)</span> </span>{ <span class="hljs-keyword">int</span> lastSlashIndex = address.lastIndexOf(<span class="hljs-string">'/'</span>); <span class="hljs-keyword">if</span> (lastSlashIndex >= <span class="hljs-number">0</span> && lastSlashIndex < address.length() - <span class="hljs-number">1</span>) { download(address, (<span class="hljs-keyword">new</span> URL(address)).getFile()); } <span class="hljs-keyword">else</span> { System.err.println(<span class="hljs-string">"Could not figure out local file name for "</span>+address); } } <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String[] args)</span> </span>{ <span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> i = <span class="hljs-number">0</span>; i < args.length; i++) { download(args[i]); } } } |