====== Java.Wget ====== Downloading files from web with Java /* * This is a simply wget. * You can test your URL * * $Log$ */ import java.io.IOException; import java.io.EOFException; import java.io.DataInputStream; import java.io.PrintStream; import java.net.URL; import java.net.URLConnection; import java.net.HttpURLConnection; /** * @version $Revision$ */ public class wget { static final PrintStream out = System.out; static final String commandName = wget.class.getName(); static int count; static boolean verb; static boolean output = true; public static void main(String args[]) throws IOException { try { while (args[0].charAt(0) == '-') { String argument = args[0].substring(1); if (argument.equals("v")) { verb = true; } else if (argument.equals("np")) { output = false; } args[0] = args[1]; if (args.length > 2) { args[1] = args[2]; } } } catch (ArrayIndexOutOfBoundsException e) { out.println( "USAGE: " + commandName + " [-v] [-np] " ); out.println( "\t-v : verbose all action." ); out.println( "\t-np : don't print the data from the URL." ); System.exit( 1 ); } URLConnection url = (new URL(args[0])).openConnection(); if (url instanceof HttpURLConnection) { readHttpURL((HttpURLConnection) url); } else { readURL(url); } } public static final void readURL(URLConnection url) throws IOException { DataInputStream in = new DataInputStream(url.getInputStream()); printHeader(url); try { while (true) { writeChar((char) in.readUnsignedByte()); } } catch (EOFException e) { if (output) verbose("\n"); verbose(commandName + ": Read " + count + " bytes from " + url.getURL()); } catch (IOException e) { out.println( e + ": " + e.getMessage()); if (output) verbose("\n"); verbose(commandName + ": Read " + count + " bytes from " + url.getURL()); } System.exit(0); } public static final void readHttpURL(HttpURLConnection url) throws IOException { long before, after; url.setAllowUserInteraction (true); verbose(commandName + ": Contacting the URL ..."); url.connect(); verbose(commandName + ": Connect. Waiting for reply ..."); before = System.currentTimeMillis(); DataInputStream in = new DataInputStream(url.getInputStream()); after = System.currentTimeMillis(); verbose(commandName + ": The reply takes " + ((int) (after - before) / 1000) + " seconds"); before = System.currentTimeMillis(); try { if (url.getResponseCode() != HttpURLConnection.HTTP_OK) { out.println(commandName + ": " + url.getResponseMessage()); } else { printHeader(url); while (true) { writeChar((char) in.readUnsignedByte()); } } } catch (EOFException e) { after = System.currentTimeMillis(); int milliSeconds = (int) (after-before); if (output) verbose("\n"); verbose(commandName + ": Read " + count + " bytes from " + url.getURL()); verbose(commandName + ": HTTP/1.0 " + url.getResponseCode() + " " + url.getResponseMessage()); url.disconnect(); verbose(commandName + ": It takes " + (milliSeconds/1000) + " seconds" + " (at " + round(count/(float) milliSeconds) + " K/sec)."); if (url.usingProxy()) { verbose(commandName + ": This URL uses a proxy"); } } catch (IOException e) { out.println( e + ": " + e.getMessage()); if (output) verbose("\n"); verbose(commandName + ": I/O Error : Read " + count + " bytes from " + url.getURL()); out.println(commandName + ": I/O Error " + url.getResponseMessage()); } System.exit(0); } public static final void printHeader(URLConnection url) { verbose(wget.class.getName() + ": Content-Length : " + url.getContentLength() ); verbose(wget.class.getName() + ": Content-Type : " + url.getContentType() ); if (url.getContentEncoding() != null) verbose(wget.class.getName() + ": Content-Encoding : " + url.getContentEncoding() ); if (output) verbose(""); } public final static void writeChar(char c) { if (output) out.print(c); count++; } public static final void verbose(String s) { if (verb) out.println( s ); } public static final float round(float f) { return Math.round(f * 100) / (float) 100; } } [[http://koala.ilog.fr/plh/generator/wget.html]] import java.io.*; import java.net.*; import java.util.Vector; /** This class does a simple HTTP GET and writes the retrieved content to a local file * * @author Brian Pipa - http://pipasoft.com * @version 1.0 */ public class wget { static final String FS = File.separator; /** This method does the actual GET * * @param theUrl The URL to retrieve * @param filename the local file to save to * @exception IOException */ public void get(String theUrl, String filename) throws IOException { try { URL gotoUrl = new URL(theUrl); InputStreamReader isr = new InputStreamReader(gotoUrl.openStream()); BufferedReader in = new BufferedReader(isr); StringBuffer sb = new StringBuffer(); String inputLine; boolean isFirst = true; //grab the contents at the URL while ((inputLine = in.readLine()) != null){ sb.append(inputLine+"\r\n"); } //write it locally createAFile(filename, sb.toString()); } catch (MalformedURLException mue) { mue.printStackTrace(); } catch (IOException ioe) { throw ioe; } } //creates a local file /** Writes a String to a local file * * @param outfile the file to write to * @param content the contents of the file * @exception IOException */ public static void createAFile(String outfile, String content) throws IOException { FileOutputStream fileoutputstream = new FileOutputStream(outfile); DataOutputStream dataoutputstream = new DataOutputStream(fileoutputstream); dataoutputstream.writeBytes(content); dataoutputstream.flush(); dataoutputstream.close(); } /** The main method. * * @param args */ public static void main(String[] args) { if (args.length != 2) { System.out.println("\nUsage: java wget URL localfilename"); System.out.println("Example: java wget http://google.com google.html"); System.exit(1); } try { wget httpGetter = new wget(); httpGetter.get(args[0], args[1]); } catch (Exception ex) { ex.printStackTrace(); } } } [[http://pipasoft.com/free-java-classes/download/wget.java]] import java.io.*; import java.net.*; /* * Command line program to download data from URLs and save * it to local files. Run like this: * java FileDownload http://schmidt.devlib.org/java/file-download.html * @author Marco Schmidt */ public class FileDownload { public static void download(String address, String localFileName) { OutputStream out = null; URLConnection conn = null; InputStream in = null; try { URL url = new URL(address); out = new BufferedOutputStream( new FileOutputStream(localFileName)); conn = url.openConnection(); in = conn.getInputStream(); byte[] buffer = new byte[1024]; int numRead; long numWritten = 0; while ((numRead = in.read(buffer)) != -1) { out.write(buffer, 0, numRead); numWritten += numRead; } System.out.println(localFileName + "\t" + numWritten); } catch (Exception exception) { exception.printStackTrace(); } finally { try { if (in != null) { in.close(); } if (out != null) { out.close(); } } catch (IOException ioe) { } } } public static void download(String address) { int lastSlashIndex = address.lastIndexOf('/'); if (lastSlashIndex >= 0 && lastSlashIndex < address.length() - 1) { download(address, address.substring(lastSlashIndex + 1)); } else { System.err.println("Could not figure out local file name for " + address); } } public static void main(String[] args) { for (int i = 0; i < args.length; i++) { download(args[i]); } } } [[http://schmidt.devlib.org/java/file-download.html]]