package com.austinv11.collectiveframework.dependencies.download; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.util.EnumSet; import java.util.List; import java.util.Map; public class BinaryProvider implements IDownloadProvider { @Override public boolean downloadFile(String link, String downloadPath) { try { URL url = new URL(link); HttpURLConnection http = (HttpURLConnection) url.openConnection(); Map<String,List<String>> header = http.getHeaderFields(); while (isRedirected(header)) { link = header.get("Location").get(0); url = new URL(link); http = (HttpURLConnection) url.openConnection(); header = http.getHeaderFields(); } InputStream input = http.getInputStream(); byte[] buffer = new byte[4096]; int n = -1; OutputStream output = new FileOutputStream(new File(downloadPath)); while ((n = input.read(buffer)) != -1) { output.write(buffer, 0, n); } output.close(); return true; } catch (Exception e) { e.printStackTrace(); } return false; } private static boolean isRedirected( Map<String,List<String>> header ) { for (String hv : header.get(null)) { if (hv.contains(" 301 ") || hv.contains(" 302 ")) return true; } return false; } @Override public EnumSet<FileType> getCapabilities() { return EnumSet.of(FileType.BINARY); } }