UNIVERSIDAD DE PANAMÁ CENTRO REGIONAL UNIVERSITARIO DE VERAGUAS FACULTAD INFORMÁTICA, ELECTRÓNICA Y COMUNICACIÓN LIC. EN INFORMÁTICA PARA LA GESTIÓN EDUCATIVA Y EMPRESARIAL PROGRAMACIÓN IV INF222
LABORATORIO #6 “Clase URL”
FACILITADOR DIEGO SANTIMATEO
INTEGRANTES CONCEPCION, JAIRO
9-724-1589
MONTES, DIOMEDES
9-723-640
II SEMESTRE 2008
INDICE
Contenidos
Pág.
Introducción..................................................................................................... 3 Objetivos......................................................................................................... 4 Descripción del Problema............................................................................... 5 Diagrama UML de Clases.............................................................................. 6 Estructura del programa (Uml) con la respectiva documentación de las Clases y métodos............................................................................................ 7 Class Url: ................................................................... ........................... 7 Código Fuente................................................................................ 7 Class LeeWeb........................................................................................ 8 Código Fuente................................................................................ 8,9 Class ObtenerDatos.............................................................................. 10 Código Fuente................................................................................ 10,11,12 Class DespliegaArch............................................................................. 12 Código Fuente................................................................................ 13 Similitudes de los flujos.................................................................................. 14 Utilidad práctica de la clase URL.................................................................... 15 Resultados de la Ejecución de la Aplicación, Modo Gráfico para I/O............. 16-20 Experiencias individuales del laboratorio........................................................ 21
Clase URL – Montes, Diomedes
2
Concepción, Jairo
INTRODUCCION La clase URL contiene contructores y métodos para la manipulación de URL (Universal Resource Locator): un objeto o servicio en Internet. Con el URL se identifica cualquier recurso accesible en la RED como por ejemplo; una página web, un documento, una dirección de correo, imagen, vídeo, audio, texto,etc. Normalmente una URL consta de: Identificador del método de acceso. Servidor que identifica la computadora que cuenta con el recurso
Nombre del recurso. El formato general de un URL es: protocolo://servidor/directorio/archivo, dado una dirección URL Podemos obtener datos desde de la RED, con un InputStream que modele el comportamiento fundamental de un flujo de entrada.
Nuestra aplicación esta diseñada para leer un sitio Web y pasar su contenido a un archivo de texto. De igual forma podemos añadir una etiqueta HTML al sitio Web en cualquier parte del mismo sin afectar su contenido.
Con un explorador de Internet se puede visualizar el contenido del archivo creado además del documento añadido.
Clase URL – Montes, Diomedes
3
Concepción, Jairo
OBJETIVOS
Identificar similitudes en el manejo de FLUJOS para captura desde teclado, lectura de archivo de texto, lectura de un recurso de la web, despliegue en consola.
Crear una aplicación Java que lea un documento HTML de la web, lo despliegue en consola y lo grabe en un archivo de texto.
Clase URL – Montes, Diomedes
4
Concepción, Jairo
DESCRIPCIÓN DEL PROBLEMA
Este laboratorio se puede realizar en grupos de dos personas y trata de lo siguiente: Identificar similitudes en el manejo de FLUJOS para captura desde teclado, lectura de archivo de texto, lectura de un recurso de la web, despliegue en consola. Crear una aplicación Java que lea un documento HTML de la web, lo despliegue en consola de manera legible y lo grabe en un archivo de texto. Mediante una clase nueva adicione al archivo de texto un párrafo HTML (use las etiquetas adecuadas) creado por usted. En esa clase nueva adicione un método que permita extraer el contenido de una etiqueta y crear un archivo de texto con ese contenido. Revise si el archivo se crea correctamente. Con un explorador de Internet despliegue el contenido del archivo que usted creó.
Clase URL – Montes, Diomedes
5
Concepción, Jairo
Clase URL – Montes, Diomedes
6
Concepción, Jairo
DIAGRAMA UML DE CLASES
Class Url Objetos
Clases
Acceso LeeWeb() ObtenerAcceso ObtenerDatos() Captura DespliegaArch()
Main()
Class LeeWeb String inputText; BufferedReader pag; String OpenUrl; Int cant;
BufferedReader leeURL() String ObtieneURL() Void EscribirUrl() Int Getcant()
Class ObtenerDatos
No tiene
Void GetParrafo(String eti) Void AñadirParrafo(String Id,String parrafo,int cantpar)
Class DespliegaArch String Url; String Id; String Parrafo; Parrafo Eti;
PrinterArch() PrinterArch(String inputText) GetId() GetParrafo() GetEtiqueta()
ESTRUCTURA DEL PROGRAMA (UML) CON LA RESPECTIVA DOCUMENTACIÓN DE LAS CLASES Class Url:
Class Url Objetos
Descripción - Funcionamiento
Nombre
Clases
Captura
DespliegaArch()
ObtenerAcceso
ObtenerDatos()
acceso
LeeWeb() Métodos
Main()
void
Objeto de la clase DespliegaArch() que se encarga de capturar los datos que se van a utilizar en el programa Objeto de la clase ObtenerDatos() que se encarga de Añadir y extraer el contenido del archivo. Objeto de la clase LeeWeb() que se encarga de lee un archivo URL y lo escribe en otro archivo. Descripción - Funcionamiento Se encarga de la ejecución del programa, llama a los métodos de las demás clases.
Código Fuente de la clase import java.io.*; import java.net.*; import javax.swing.*; import java.lang.*; class Url { public static void main(String args[]) throws IOException { DespliegaArch Captura = new DespliegaArch(); ObtenerDatos ObtenerAcceso = new ObtenerDatos(); LeeWeb acceso = new LeeWeb(Captura.PrinterArch()); System.out.println("**** Leyendo archivo de la web ...espere por favor ...."); Captura.PrinterArch(acceso.ObtieneURL()); acceso.EscribirUrl(); ObtenerAcceso.AñadirParrafo(Captura.GetId(), Captura.GetParrafo(),acceso.Getcant()); ObtenerAcceso.GetParrafo(Captura.GetEtiqueta()); } } // fin del main
Class LeeWeb:
Class LeeWeb Variables de la Clase
Descripción - Funcionamiento
Nombre
Tipo
inputText
String
pag
BufferedReader
OpenUrl
String
Almacena la dirección del Url que se desea leer
cant
int
Cuenta y almacena la cantidad de párrafos que existen en el archivo leído.
Almacena los datos que se leyeron en el archivo
Métodos
Descripción - Funcionamiento
LeeURL()
BufferedReader
Método privado que se conecta y usa un URL para obtener el recurso correspondiente.
ObtieneURL()
String
Método publico que realiza la lectura del documento URL para luego devolver todos los datos leidos.
EscribirUrl()
void
Método publico que se encarga de realizar la escritura en un nuevo archivo, los datos obtenidos en el url
Getcant()
Int
Método publico que se encarga de contar la cantidad de párrafos que contiene el Url.
Código Fuente de la clase import java.io.*; import java.net.*; import java.lang.*; class LeeWeb { private String inputText =""; private BufferedReader pag; private String OpenUrl; private BufferedReader web; private int cant; public LeeWeb(String Url) { this.OpenUrl = Url; } //constructor LeeWeb
private BufferedReader LeeURL() throws IOException{ URL recurso = new URL(OpenUrl); URLConnection recursoWeb = recurso.openConnection(); InputStream is = recursoWeb.getInputStream(); InputStreamReader isr = new InputStreamReader(is); this.pag = new BufferedReader(isr); return(this.pag); }//fin del metodo LeeURL
Clase URL – Montes, Diomedes
9
Concepción, Jairo
public String ObtieneURL() throws IOException { LeeURL(); String inputLine=""; System.out.flush(); // obliga al despliegue inmediato try { while ((inputLine = pag.readLine()) != null){ inputText += inputLine + "\n"; if(inputLine.indexOf("
")!=-1){ cant++; } } pag.close(); }catch (MalformedURLException me) { System.out.println("MalformedURLException: " + me); } catch (IOException ioe) { System.out.println("IOException: " + ioe); } return(this.inputText); } // fin del metodo LeeURL
public int Getcant(){ return(this.cant); } } // fin de LeeWeb
public void EscribirUrl() throws IOException { try{ String s; BufferedReader leer = new BufferedReader(new StringReader(ObtieneURL())); PrintWriter escribir = new PrintWriter(new BufferedWriter(new FileWriter("Prueba.html"))); while ((s = leer.readLine()) != null){ escribir.println(s); } leer.close(); escribir.close(); } catch (IOException ioe) { System.out.println("Final de la lectura"); } }//fin de metodo EscribirUrl
Class ObtenerDatos: Clase URL – Montes, Diomedes
10
Concepción, Jairo
Class ObtenerDatos Variables de la Clase
Descripción - Funcionamiento
Nombre
Tipo
-------------
------------
Métodos
GetParrafo(String eti)
AñadirParrafo(String Id,String parrafo,int cantpar)
------------------------------------------------
Descripción - Funcionamiento
void
Método publico que se encarga de obtener el contenido de cualquiera etiqueta html, utiliza como argumento la variable eti que contiene la etiqueta que se desea obtener el contenido.
void
Método publico que se encarga de añadir un párrafo en el archivo con su respectivo Id, Que utiliza como argumento la variable id que contiene el identificador del párrafo, la variable parrafo que contiene el parrafo que se desea añadir y la variable cantpar que contiene el numero donde se desea añadir el párrafo
Código Fuente de la clase import java.io.*; import java.net.*; import javax.swing.*; class ObtenerDatos {
public ObtenerDatos() { } //constructor LeeWeb
Clase URL – Montes, Diomedes
11
Concepción, Jairo
public void GetParrafo(String eti)throws IOException{ String s; int sw=1; try{ FileReader arch1 = new FileReader("DatosUrl.html"); BufferedReader leer = new BufferedReader(arch1); PrintWriter escribir = new PrintWriter(new BufferedWriter(new FileWriter("Extraccion.txt"))); while ((s = leer.readLine()) != null){ if(s.indexOf("<"+eti+">")!=-1){ if(s.indexOf(""+eti+">")!=-1){ escribir.println(s); } else{ sw=0; } } if(sw==0){ escribir.println(s); if(s.indexOf(""+eti+">")!=-1){ sw=1; } } } leer.close(); escribir.close(); } catch (Exception e) { e.printStackTrace(); } }//fin del metodo LeeURL
public void AñadirParrafo(String Id,String parrafo,int cantpar) throws IOException { int cant=0; String s; String nuPar = JOptionPane.showInputDialog(null,"La cantidad de parrafo que contiene el archivo es de "+cantpar+"\n En que numero de parrafo desea incluir "); int numPar=Integer.parseInt(nuPar); try{
FileReader arch1 = new FileReader("Prueba.html"); BufferedReader in = new BufferedReader(arch1); File salida = new File("DatosUrl.html"); //archivo de salida PrintWriter ar = new PrintWriter(salida); while ((s = in.readLine()) != null){ if(cantpar>0){ if(s.indexOf("
")!=-1){ cant++; if(cant==numPar){ ar.println("
"+parrafo+"
"); } } }else { ar.println("
"+parrafo+"
"); } ar.println(s); } in.close(); File fichero = new File("DatosUrl.html"); fichero.delete();
Clase URL – Montes, Diomedes
12
Concepción, Jairo
ar.close(); File f1 = new File("DatosUrl.html"); File f2 = new File("Prueba.html"); f1.renameTo(f2); } catch (Exception e) { e.printStackTrace(); } } // fin del metodo AñadirParrafo } // fin de LeeWeb
Class DespliegaArch:
Class DespliegaArch Variables de la Clase
Descripción - Funcionamiento
Nombre Url
Tipo String
Almacena la dirección del Url.
Id
String
Almacena el id del parrafo
Parrafo
String
Almacena el parrafo que se desea añadir
Eti
String
Almacena la etiqueta que se desea obtener
Métodos
Descripción - Funcionamiento
PrinterArch()
String
Método publico que se encarga de capturar la dirección Url.
PrinterArch(String inputText)
void
Método publico que se encarga de desplegar en consola el Url.
GetId()
String
Método publico que se encarga de obtener el id del parrafo.
GetParrafo()
String
Método publico que se encarga de capturar el párrafo que se desea añadir al archivo.
GetEtiqueta()
String
Método publico que se encarga de capturar la etiqueta a la cual se desea obtener el contenido.
Código Fuente de la clase Clase URL – Montes, Diomedes
13
Concepción, Jairo
import java.io.*; import java.net.*; import javax.swing.*; class DespliegaArch { private String Url; private String Id; private String Parrafo; private String Eti; public DespliegaArch() {} //constructor DespliegaArch
public String PrinterArch() { Url = "http://pisuerga.inf.ubu.es/lsi/Invest/Java/Tuto/II_5.htm"; return(this.Url); }
public void PrinterArch(String inputText) { System.out.println(inputText); //despliegue del documento HTML en consola System.out.println("\n**** Fin de la lectura de la web"); }
public String GetId() { Id = JOptionPane.showInputDialog(null," return(this.Id); }
Introduzca el Id del parrafo ");
public String GetParrafo() { Parrafo = JOptionPane.showInputDialog(null,"Introduzca el parrafo"); return(this.Parrafo); }
public String GetEtiqueta() { Eti = JOptionPane.showInputDialog(null,"Introduzca la etiqueta que desea extraer el contenido"); return(this.Eti); } } // fin de DespliegaArch
SIMILITUDES DE LOS FLUJOS Clase URL – Montes, Diomedes
14
Concepción, Jairo
En el manejo de FLUJOS en Java existen diversas similitudes las cuales desglosaremos a continuación: En los flujos para la lectura de un recurso de la Web existe una clase de nombre InputStreamReader, la cual tiene similitudes con los flujos para captura desde el teclado. De igual forma la clase BufferedReader aparece en los flujos para la lectura de una Web, la lectura de un archivo y para el despliegue en consola, existiendo en estos flujos similitudes entre ellos. En la mayoría de los casos de flujos se observa la clase BufferedReader a excepción de la lectura desde el teclado y en los flujos para pasar datos a un archivo de texto, en donde se utiliza la clase BufferedWriter u otras las cuales son para escribir en un archivo. Consideramos que los flujos FileReader y FileWriter también son similares, con la diferencia que uno es para leer y el otro para escribir.
Clase URL – Montes, Diomedes
15
Concepción, Jairo
UTILIDAD PRÁCTICA DE LA CLASE URL
Mediante la clase URL se puede identificar cualquier recurso accesible en la RED como por ejemplo: una página web, una dirección de correo, etc.
Un ejemplo práctico es el que aplicamos en nuestro trabajo, en donde leemos un sitio web y pasamos su contenido a un archivo de texto. De igual forma podemos añadir un documento HTML al sitio web en cualquier parte del mismo sin afectar su contenido.
Clase URL – Montes, Diomedes
16
Concepción, Jairo
Con un explorador de Internet se puede visualizar el contenido del archivo creado además del documento añadido. Esto sería una práctica muy útil a utilizar la clase URL.
Resultados de la Ejecución de la Aplicación En esta pantalla se muestra en consola un mensaje de espera, se aplica para indicar que la aplicación esta trabajando en la lectura del documento procedente de la Web.
En esta pantalla vemos desplegado en consola todo el contenido HTML del documento que hemos leído de la web, de igual manera este contenido lo grabamos en un archivo html. Para este caso especifico accesamos al documento "http://pisuerga.inf.ubu.es/lsi/Invest/Java/Tuto/II_5.htm";
Clase URL – Montes, Diomedes
17
Concepción, Jairo
En esta pantalla mostramos el archivo html guardado.
Clase URL – Montes, Diomedes
18
Concepción, Jairo
En el siguiente paso procedemos a adicionar al archivo de texto un párrafo HTML, para esto solicitaremos que ingrese el ID del párrafo como se muestra a continuación en la siguiente pantalla:
Después de introducir el ID, se procede a capturar el contenido del párrafo; como se muestra a continuación
En la siguiente pantalla le ofrecemos al usuario la posibilidad de ingresar el párrafo donde el desee, para esto le indicamos la cantidad total de parrafos que contiene el archivo, y le solicitamos que ingrese después de que numero desea ingresar esta etiqueta. Para este caso lo insertaremos después del tercer (3) parrafo.
En las siguientes pantallas mostramos la etiqueta HTML que hemos introducido en el documento. Les presentamos una vista de la etiqueta introducida a través del código fuente del archivo y desde el explorador de Windows. Código fuente del archivo:
Clase URL – Montes, Diomedes
19
Concepción, Jairo
...
Desde el Explorador de Windows
En la siguiente pantalla extraeremos el contenido del una etiqueta HTML, para luego guardarlas en un archivo de texto. El usuario puede extraer la etiqueta deseada, para este caso extraeremos las etiquetas de párrafos (
), como se muestra a continuación: Clase URL – Montes, Diomedes
20
Concepción, Jairo
En esta pantalla desplegamos en consola el contenido de todas las etiquetas de párrafos, que se encuentran en el documento.
En esta pantalla mostramos el archivo de texto con el contenido de todas las etiquetas de párrafos, que se encuentran en el documento.
Clase URL – Montes, Diomedes
21
Concepción, Jairo
En esta pantalla mostramos el archivo de texto guardado:
Clase URL – Montes, Diomedes
22
Concepción, Jairo
EXPERIENCIAS INDIVIDUALES Diomedes Montes J Este Laboratorio es de mucha importancia para mi ya que al igual que en anteriores he adquirido nuevos conocimientos que se me seran de utiles en el desarrollo del curso,. En esta he aprendido la utilidad y el uso de un localizador Uniforme de Recursos (URL) con el cual podemos acceder a los diversos recursos de Internet, también sobre el objeto URLConnection es cual es el encargado de establecer la conexión con la PC, asi mismo sobre la utilidad del método getInputStream que proporciona un flujo para leer el contenido de entrada. Jairo Concepción Este laboratorio era parecido al laboratorio de archivo, donde la única diferencia estaba en el flujo para obtener el Url, presente un poco de dificultades en el manejo de las etiquetas que me permitirían añadir o extraer algo del archivo Url . Estos laboratorios me están ayudando a aclarar muchas dudas que tenia antes y espero que estos conocimientos me ayudes más adelante el lo profesional.
Clase URL – Montes, Diomedes
23
Concepción, Jairo