RuuddR
RuuddR

Reputation: 941

Getting the string values of an enum

I want to make a program that downloads some files that are needed to run a gain. It's like a launcher that automatically downloads updates. This is the enum I have:

public class Configuration {

    public enum downloadFiles {
        load1 ("load1.png", "https://dl.dropboxusercontent.com/u/51947680/Xenolith/load1.png"),
        load2 ("load2.png", "https://dl.dropboxusercontent.com/u/51947680/Xenolith/load2.png"),
        load3 ("load3.png", "https://dl.dropboxusercontent.com/u/51947680/Xenolith/load3.png");

        public String fileName, URL;

        private downloadFiles(String fileName, String URL) {
            this.fileName = fileName;
            this.URL = URL;
        }

        public String getFileName() {
            return fileName;
        }

        public String getURL() {
            return URL;
        }

    }

}

I also have a class that downloads the files, which is:

public class DownloadUtility {
    private static final int BUFFER_SIZE = 4096;

    /**
     * Downloads a file from a URL
     * @param fileURL HTTP URL of the file to be downloaded
     * @param saveDir path of the directory to save the file
     * @throws IOException
     */
    public static void downloadFile(String fileName, String fileURL)
            throws IOException {
        URL url = new URL(fileURL);
        HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
        int responseCode = httpConn.getResponseCode();

        // always check HTTP response code first
        if (responseCode == HttpURLConnection.HTTP_OK) {
            String disposition = httpConn.getHeaderField("Content-Disposition");
            String contentType = httpConn.getContentType();
            int contentLength = httpConn.getContentLength();

            System.out.println("Content-Type = " + contentType);
            System.out.println("Content-Disposition = " + disposition);
            System.out.println("Content-Length = " + contentLength);
            System.out.println("fileName = " + fileName);

            // opens input stream from the HTTP connection
            InputStream inputStream = httpConn.getInputStream();
            String saveFilePath = System.getProperty("user.home") + "/Desktop" + File.separator + fileName;

            // opens an output stream to save into file
            FileOutputStream outputStream = new FileOutputStream(saveFilePath);

            int bytesRead = -1;
            byte[] buffer = new byte[BUFFER_SIZE];
            while ((bytesRead = inputStream.read(buffer)) != -1) {
                outputStream.write(buffer, 0, bytesRead);
            }

            outputStream.close();
            inputStream.close();

            System.out.println("File downloaded");
        } else {
            System.out.println("No file to download. Server replied HTTP code: " + responseCode);
        }
        httpConn.disconnect();
    }
}

So what I want to do is that the downloadFiles method downloads all the files in the enum sequentially. Btw is this a good way of doing this? If there is a better way, can you please tell me, because I'm trying to learn to code java in a neat way.

Upvotes: 0

Views: 180

Answers (1)

Harsh Poddar
Harsh Poddar

Reputation: 2554

You can do the following:

for(Configuration.downloadFiles df : Configuration.downloadFiles.values()){
    DownloadUtility.downloadFile(df.getFileName(), df.getURL());
}

Upvotes: 1

Related Questions