Es muy sencillo acceder a archivos en la red utilizando Java. El paquete java.net dispone de varias clases e interfases a tal efecto.
En primer lugar, la clase URL nos permite definir un recurso en la red de varias maneras, por ejemplo:
URL url1 = new URL ("http://www.rockar.com.ar/index.html");
URL url2 = new URL ("http", "www.rockar.com.ar", "sbits.htm");
Por otra parte, podemos establecer una conexión a un URL dado mediante openConnection:
URLConnection conexion = url.openConnection();
Una vez lograda la conexión, podemos leer y escribir datos utilizando
streams (
corrientes de datos), como en el caso de manejo de archivos comunes (ver capítulo X). Un DataInputStream nos permite leer datos que llegan a través de la red, y un DataOutputStream nos permite enviar datos al host.
Por ejemplo:
DataInputStream datos = new DataInputStream( corrienteEntrada );
En nuestro caso, la corriente de entrada de datos proviene de la conexión al URL. El método getInputStream() del objeto URLConnection nos provee tal corriente:
DataInputStream datos = new DataInputStream(conex.getInputStream())
De este modo podemos escribir un pequeño programa para, por ejemplo, leer una página HTML desde una dirección arbitraria de internet. El programa, luego de compilarse mediante
javac Ejemplo25.java, se ejecuta con
java Ejemplo25 <url>; por ejemplo: java Ejemplo25 http://www.rockar.com.ar/index.html.---
import java.io.*;
import java.net.*;
public class Ejemplo25 {
public static void main(String argv[]) {
String s;
try {
URL url = new URL (argv[0]);
URLConnection conex = url.openConnection();
System.out.println("Cargando "+argv[0]);
DataInputStream datos = new DataInputStream(conex.getInputStream());
if (s != null) System.out.println(s);
}
catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Sintaxis: java Ejemplo25 <url>");
}
catch (UnknownHostException e) {
System.out.println("El host no existe o no responde");
}
catch (Exception e) {
}
}
}
Este programa muestra el HTML como texto en la pantalla, pero podríamos grabarlo a un archivo para guardarlo. Inclusive, podríamos procesarlo a medida que lo recibimos, identificar los tags <A HREF=url>, guardarlos en un vector, y seguidamente conectarnos y bajar los links que figuran en la página original hasta bajar un site completo.
Noten que esto no sólo sirve para establecer conexiones a páginas HTML. En realidad, un URL puede referirse también a otros protocolos, como gopher, ftp, etcétera; si bien según la implementación de Java puede haber problemas para conectarse a algunos tipos de URL.
Para ver los tipos de URL posibles les recomiendo leer la página:
http://www.ncsa.uiuc.edu/demoweb/url-primer.html