How to Download a File in Java

Nowadays any non trivial application written in Java would need to access cloud services over HTTP. Whether you are accessing a cloud web service or trying to download a webpage programmatically, the approach is same. Java provides a dedicated class HttpURLConnection for getting data over the HTTP protocol. The following sample Java program demonstrates the use of HttpURLConnection to download a web page. The following Java program would print the contents of Google's home page (http://www.google.com) on the command line console.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 * Java program to download a web page over http protocol.
 * Requires active Internet connection.
 */
public class DownloadPage {
    
    public static void main(String[] args) {
        String pageToDownload = "http://www.google.com";
        String downloadedContent = downloadPage(pageToDownload);
        System.out.println(downloadedContent);
    }

    /**
     * Download a webpage using HttpURLConnection class.
     * @param pageToDownload
     * @return 
     */
    private static String downloadPage(String pageToDownload) {
        String result = "";
        try {
            URL url = new URL(pageToDownload);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET"); // we are getting the contents
            connection.connect();

            BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            StringBuilder stringBuilder = new StringBuilder();

            String line = null;
            while ((line = reader.readLine()) != null)
            {
              stringBuilder.append(line + "\n");
            }
            reader.close();
            result =  stringBuilder.toString();
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        return result;
  }    
}

The same approach can be used to access a cloud web service returning XML or JSON data. The following sample Java program demonstrates the use of HttpURLConnection to return 7 day weather forecast of London City using the OpenWeatherMap API. The data returned is in JSON format,

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 * Uses OpenWeatherMap API and HttpURLConnection to download 7 day weather 
 * forecast of London city in JSON format.
 */
public class WeatherDownload {
    public static void main(String[] args) {
        // Please see http://openweathermap.org/forecast16
        String weatherAPIUrl = "http://api.openweathermap.org/data/2.5/forecast/daily?q=London&mode=json&units=metric&cnt=7&appid=bd82977b86bf27fb59a04b61b657fb6f";
        
        String downloadedContent = downloadWeather(weatherAPIUrl);
        System.out.println("7 day weather forecast of London city");
        System.out.println(downloadedContent);
    }

    /**
     * Access a cloud API using HttpURLConnection class.
     * @param weatherAPIUrl
     * @return 
     */
    private static String downloadWeather(String weatherAPIUrl) {
        String result = "";
        try {
            URL url = new URL(weatherAPIUrl);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET"); // we are getting the contents
            connection.connect();

            BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            StringBuilder stringBuilder = new StringBuilder();

            String line = null;
            while ((line = reader.readLine()) != null)
            {
              stringBuilder.append(line + "\n");
            }
            reader.close();
            result =  stringBuilder.toString();
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        return result;
  }    
}