Java URL Download downloadSource(PrintStream out, PrintStream err, String srcURL, String dirStr, boolean extract)

Here you can find the source of downloadSource(PrintStream out, PrintStream err, String srcURL, String dirStr, boolean extract)

Description

download Source

License

Open Source License

Declaration

public static void downloadSource(PrintStream out, PrintStream err, String srcURL, String dirStr,
            boolean extract) 

Method Source Code


//package com.java2s;
import java.io.*;
import java.net.URL;
import java.net.URLConnection;
import java.util.jar.JarEntry;
import java.util.jar.JarInputStream;

public class Main {
    public static void downloadSource(PrintStream out, PrintStream err, String srcURL, String dirStr,
            boolean extract) {
        // Get the file name from the URL.
        String fileName = (srcURL.lastIndexOf('/') > 0) ? srcURL.substring(srcURL.lastIndexOf('/') + 1) : srcURL;

        try {/*  ww  w  .  j av a 2 s  .  co  m*/
            out.println("Connecting...");

            File dir = new File(dirStr);
            if (!dir.exists()) {
                err.println("Destination directory does not exist.");
            }
            File file = new File(dir, fileName);

            OutputStream os = new FileOutputStream(file);
            URLConnection conn = new URL(srcURL).openConnection();
            int total = conn.getContentLength();
            InputStream is = conn.getInputStream();

            if (total > 0) {
                out.println("Downloading " + fileName + " ( " + total + " bytes ).");
            } else {
                out.println("Downloading " + fileName + ".");
            }
            byte[] buffer = new byte[4096];
            int count = 0;
            for (int len = is.read(buffer); len > 0; len = is.read(buffer)) {
                count += len;
                os.write(buffer, 0, len);
            }

            os.close();
            is.close();

            if (extract) {
                is = new FileInputStream(file);
                JarInputStream jis = new JarInputStream(is);
                out.println("Extracting...");
                unjar(jis, dir);
                jis.close();
                file.delete();
            }
        } catch (Exception ex) {
            err.println(ex);
        }
    }

    public static void unjar(JarInputStream jis, File dir) throws IOException {
        // Reusable buffer.
        byte[] buffer = new byte[4096];

        // Loop through JAR entries.
        for (JarEntry je = jis.getNextJarEntry(); je != null; je = jis.getNextJarEntry()) {
            if (je.getName().startsWith("/")) {
                throw new IOException("JAR resource cannot contain absolute paths.");
            }

            File target = new File(dir, je.getName());

            // Check to see if the JAR entry is a directory.
            if (je.isDirectory()) {
                if (!target.exists()) {
                    if (!target.mkdirs()) {
                        throw new IOException("Unable to create target directory: " + target);
                    }
                }
                // Just continue since directories do not have content to copy.
                continue;
            }

            int lastIndex = je.getName().lastIndexOf('/');
            String name = (lastIndex >= 0) ? je.getName().substring(lastIndex + 1) : je.getName();
            String destination = (lastIndex >= 0) ? je.getName().substring(0, lastIndex) : "";

            // JAR files use '/', so convert it to platform separator.
            destination = destination.replace('/', File.separatorChar);
            copy(jis, dir, name, destination, buffer);
        }
    }

    public static void copy(InputStream is, File dir, String destName, String destDir, byte[] buffer)
            throws IOException {
        if (destDir == null) {
            destDir = "";
        }

        // Make sure the target directory exists and
        // that is actually a directory.
        File targetDir = new File(dir, destDir);
        if (!targetDir.exists()) {
            if (!targetDir.mkdirs()) {
                throw new IOException("Unable to create target directory: " + targetDir);
            }
        } else if (!targetDir.isDirectory()) {
            throw new IOException("Target is not a directory: " + targetDir);
        }

        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File(targetDir, destName)));
        int count = 0;
        while ((count = is.read(buffer)) > 0) {
            bos.write(buffer, 0, count);
        }
        bos.close();
    }
}

Related

  1. downloadGzipCompressedFile(URL url, File destination)
  2. downloadHttp(String downloadURL, String basePath, String commonPathURL)
  3. downloadImg(String urlPath, File file)
  4. downloadMobiFromEpubUrl(String href)
  5. downloadPageSource(String stringURL)
  6. downloadString(String url)
  7. downloadString(URL url)
  8. downloadString(URL url)
  9. downloadText(String url)