UNIVERSIDAD DE PANAMÁ CENTRO REGIONAL UNIVERSITARIO DE VERAGUAS FACULTAD DE INFORMÁTICA, ELECTRÓNICA Y COMUNICACIÓN ESCUELA DE INGENIERÍA EN INFORMÁTICA CARRERA: LICENCIATURA DE INGENIERÍA EN INFORMÁTICA
PROGRAMACIÓN III PROGRAMACIÓN ORIENTADA A OBJETOS
LABORATORIO 6 LA CLASE U.R.L.
PRESENTADO POR LOS ESTUDIANTES: EUFEMIA, BUITRAGO 2-719-2461 FÉLIX, RIVERA 9-727-620
PROFESOR: DIEGO SANTIMATEO
II SEMESTRE III AÑO
FECHA DE ENTREGA: MARTES, 11 DE NOVIEMBRE DE 2008.
ÍNDICE INTRODUCCIÓN……………………………………………………………………….
i
OBJETIVOS……………………………………………………………………………..
ii
CONTENIDO…………………………………………………………………………….
iii
Descripción de los requisitos del programa……………………………………..
1
Descripción general del funcionamiento de las clases………………………...
2
Código fuente de la clase 1 (Principal)-Main……………………………………
3
Descripción de las clases, métodos y objetos de la clase class PrincipalLeeWeb……………………………………………………………………
6
Código fuente de la clase 2………………………………………………………..
8
Descripción de las clases, métodos y objetos de la clase class ClaseNueva…………………………………………………………………………
12
Resultados de la ejecución……………………………………………………….
14
Diagrama UML del programa……………………………………………………..
25
Similitudes en el manejo de flujos………………………………………………...
26
Utilidad practica de la clase U.R.L…………………………………………………
26
Reflexiones individuales sobre el proyecto- Eufemia Buitrago………………..
27
Reflexiones individuales sobre el proyecto- Félix Rivera………………………
28
CONCLUSIONES……………………………………………………………………….
iv
BIBLIOGRAFÍAS……………………………………………………………………….
v
i
INTRODUCCIÓN
Debido a que en Internet podemos acceder o identificar diversos recursos usando un Localizador Uniforme de Recursos (URL) con el cual podemos identificar cualquier recurso accesible en la RED como una página web, un documento, una dirección de correo, imagen, video, audio, texto, etc. A su ves la World Wide Web necesita obtener recursos para su funcionamiento, razón por la cual utiliza U.R.L., los cuales codifican las localizaciones de los recursos de la Red. En el presente informe de laboratorio daremos a conocer más el funcionamiento de un U.R.L. junto a una clase con el mismo nombre encargada de crear una conexión real.
ii
OBJETIVO GENERAL
Construir una aplicación Java que lea un documento html de la web y lo despliegue en consola junto a sus modificaciones.
iii
CONTENIDO
1
DESCRPCIÓN DE LOS REQUISITOS DEL PROGRAMA 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ó.
2
DESCRIPCIÓN GENERAL DEL FUNCIONAMIENTO DE LAS CLASES
CLASE 1 - CLASE PRINCIPAL-Main() NOMBRE DE LA CLASE: MODIFICADORES DE ACCESO: FUNCIÓN DE LA CLASE:
PrincipalLeeWeb public Clase que permite una conexión y crea un vinculo entre el computador usuario y el computador recurso.
CLASE 2 NOMBRE DE LA CLASE: MODIFICADORES DE ACCESO: FUNCIÓN DE LA CLASE:
//CLASE 1(Principal) - MAIN import java.io.*; import java.net.*;
ClaseNueva public Clase que esta encargada de modificar el archivo de tipo html.
3
import java.lang.*; import javax.swing.*; class PrincipalLeeWeb { public static void main(String args[]) throws Exception { try { String inputLine, inputText,direccion_pag; int i=1; int sw=0; //Se solicita al ususario mediante una interfaz grafica que introduzaca la direccion de la pagina //que se desea leer direccion_pag = JOptionPane.showInputDialog(null,"Introduzca la direccion de la pagina"); URL recurso = new URL(direccion_pag); URLConnection recursoWeb = recurso.openConnection(); //Proporciona un flujo de entrada que permite el contenido del archivo InputStream is = recursoWeb.getInputStream(); //Crea el flujo para leer los datos InputStreamReader isr = new InputStreamReader(is); //Crea el filtro para leer las cadenas de caracteres BufferedReader paginaweb = new BufferedReader(isr); //Archivo de salida File archsalida = new File("primerosdat.txt"); PrintWriter out = new PrintWriter(archsalida); //Se lee el archivo url.html System.out.println("**** Leyendo archivo de la web ...espere por favor ...."); //Obliga al despliegue inmediato del archivo System.out.flush();
4
inputText =""; while ((inputLine = paginaweb.readLine()) != null) { //Inserta en el codigo el archivo, copia los id de los `parrafos y cierre de los mismos if((inputLine.indexOf("
")>=0)&&(sw==0)){ out.println("
"); i++; sw=1; } //Cierre del if else{ if((inputLine.indexOf("
")>=0)&&(sw==1)){ out.println("
"); sw=0; } //Cierre del if if((inputLine.indexOf("
")>=0)&&(sw==0)){ out.println("
"); i++; sw=1; } //Cierre del if else{ inputText += inputLine + "\n"; out.println(inputLine + "\n"); } //Cierre del else } //Cierre del else } //Cierre del while System.out.println(inputText); /**/out.close();//cierra archivo nuevo ClaseNueva agrega = new ClaseNueva(); agrega.InsertarParrafo(); agrega.ExtraerCrea(); System.out.println("\nFin de la lectura de la web"); }
//Cierre del try catch (MalformedURLException me) { System.out.println("MalformedURLException: " +
me); } //Cierre del primer catch catch (IOException ioe) {
5
System.out.println("IOException: " + ioe); } //Cierre del segundo catch } // fin del main } // fin de PrincipalLeeWeb
DESCRIPCIÓN DE LAS CLASES, MÉTODOS Y OBJETO DE LA CLASE class ClaseNueva
6
DESCRIPCIÓN DE LAS CLASES, MÉTODOS Y OBJETO DE LA CLASE class ClaseNueva-(Continuación) CLASES
FUNCIÓN MÉTODOS FUNCIÓN OBJETOS FUNCIÓN CLASE 1 - CLASE PRINCIPAL-Main() Da soporte JOptionPane.showMessag Envia archsalida Encargado específico de guardar eDialog() un PrincipalLeeWeb NOMBRE DE LA CLASE: al el primer mensaj MODIFICADORES DE protocolo public archivo de e por ACCESO: HTTP. texto Clase que permite una conexión ymedio crea un vinculo entre el FUNCIÓN DE LA CLASE: creado.
URL HttpURLConnection
CLASES
InputStreamReader String
URL
BufferedReader
computador usuario y el computadorde recurso. una ventana FUNCIÓN MÉTODOS FUNCIÓN FUNCIÓN . OBJETOS Encargado Crea el JOptionPane.showInputDi Envia Método de guardar flujo para Crea objetos alog() un utilizado en la dirección leer delos tipo mensaj la clase recurso de la página openConnection() datos. y los String URLConnecte por que se manipula. medio ion. desea de una buscar. Método deventana la clase en la cual URL podemo HttpURLCon Crea un s Obtiene los nection que objeto introduc getInputStream() isr caracteres llamado se utiliza ir un sueltos. recurso. para poder valor, carácte usar la clase URLConnect r o cadena. ion. Crea el Método Encargado InsertarParrafo() agrega Se
filtro para leer las cadenas Crea un de vinculo entre caracteres. el Encargada File de computador manejar URLConnection quelosejecuta la aplicación ficheros de y texto. el que Utilizada JOptionPane brinda el para recurso. manejar cuadros de diálogos.
invocado
encarga desde la de Clase devolverPrincipal. el índice ExtraerCrea() de la Método primera invocado aparicióndesde la paginaweb Indexof () Clase del objeto Principal. String especifica do en la instancia en cuestión.
de trabajar con los métodos de la nueva Objeto clase.
encargado de obtener las cadenas de caracteres.
7
//CLASE 2-CONTIENE EL METODO QUE MODIFICA EL ARCHIVO HTML import java.io.*; import javax.swing.*; public class ClaseNueva{ //Esta clase es la que contiene el metodo que modifica el archivo html //Constructor de la nueva clase llamada ClaseNueva public ClaseNueva(){ } public void InsertarParrafo()throws IOException{ try { //Creamos un objeto para asociar el nombre logico del archivo con el fisico o su contenido FileReader arch1 = new FileReader("primerosdat.txt"); //Utilizamos la clase BufferedReader para utilizar su metodo ReadLine BufferedReader in = new BufferedReader(arch1); String s = new String(); //Archivo de salida File salida = new File("siguientesdat.txt"); PrintWriter out = new PrintWriter(salida); String NumdeParrafo; String parrafoaagregar; NumdeParrafo = JOptionPane.showInputDialog(null,"Introduzca el numero del parrafo que desea agregar"); //Lectura del archivo while((s = in.readLine())!= null){ if(s.indexOf("
")>=0){ parrafoaagregar = JOptionPane.showInputDialog(null,"Introduzca el nuevo parrafo que desea agregar");
8
out.println("
"+parrafoaagregar+"
"); } //Cierre del if }
out.println(s); //Cierre del while
try { in.close(); File fichero = new File("primerosdat.txt"); if (fichero.delete()) System.out.println("El fichero ha sido eliminado"); else System.out.println("El fichero no puede ser eliminado"); out.close(); File f1 = new File("siguientesdat.txt"); File f2 = new File("primerosdat.txt"); boolean correcto = f1.renameTo(f2); if (correcto){ System.out.println("El renombrado ha sido correcto"); } //Cierre del if else{ System.out.println("El renombrado no se puede realizar"); }
} //Cierre del else //Cierre del segundo try
catch ( IOException e ) { System.err.println( "El archivo no se puede cerrar" ); }
//cierra hilo abierto por ventana de
diálogo }
//Cierre del primer try
catch (Exception e) { System.err.println("***Error al leer o abrir el archivo...\n" +e); }
9
}
//Cierre del metodo InsertarParrafo
public void ExtraerCrea()throws IOException{ try { FileReader arch1 = new FileReader("primerosdat.txt"); BufferedReader in = new BufferedReader(arch1); String s = new String(); boolean resultado; //Archivo de salida File salida = new File("siguientesdat.txt"); PrintWriter out = new PrintWriter(salida); String NumdeParrafo; String parrafoaagregar; int sw=0; NumdeParrafo = JOptionPane.showInputDialog(null,"Introduzca el numero del parrafo que desea extraer"); //Lectura del archivo while((s = in.readLine())!= null){ if(s.indexOf("
")>=0){ sw=1; } //Cierre del if else if(sw==1) if(s.indexOf("
")==-1) out.println(s); if(s.indexOf("")>-1) sw=0; } //Cierre del while try { in.close(); out.close(); } //Cierre del segundo try catch ( IOException e ) { System.err.println( "El archivo no se pudo cerrar" );
10
}
//Cierra hilo abierto por ventana de
diálogo }
//Cierre del primer try
catch (Exception e) { System.err.println("***Error al leer o abrir el archivo...\n" +e); } } //Cierre del metodo ExtraerCrea } //Cierre de la clase llamada ClaseNueva
DESCRIPCIÓN DE LAS CLASES, MÉTODOS Y OBJETO DE LA CLASE class ClaseNueva
11
DESCRIPCIÓN DE LAS CLASES, MÉTODOS Y OBJETO DE LA CLASE CLASE 2 NOMBRE DE LA CLASE: MODIFICADORES DE ACCESO: FUNCIÓN DE LA CLASE:
ClaseNueva public Clase que esta encargada de modificar el archivo html
CLASES
FUNCIÓN
String
Crea objetos de tipo String y los manipula.
MÉTODOS
FUNCIÓN
OBJETOS
openConnection()
Método utilizado en la clase URLConnect ion.
recurso
FUNCIÓN Encargado de guardar la dirección de la página que se desea buscar.
Método de la clase URL Crea un objeto llamado recurso.
URL
HttpURLCon getInputStream()
nection que se utiliza
isr
Obtiene los caracteres sueltos.
paginaweb
Objeto encargado de obtener las cadenas de caracteres.
para poder usar la clase URLConnect ion.
Crea un vinculo entre el computador
URLConnection
que ejecuta la aplicación y el que brinda el recurso.
Indexof ()
Se encarga de sevolver el índice de la primera aparición del objeto String especifica do en la instancia en cuestión.
12
class ClaseNueva-(Continuación) RESULTADOS DE LA EJECUCIÒN CLASES
File
FUNCIÓN
Encargada de manejar los ficheros de texto.
FileReader
Permite operaciones de lectura con el archivo indicado.
BufferedReader
Mantiene un buffer de lectura/escritur a que permite optimizar el número de accesos a fichero, haciéndolos muy útiles en operaciones de entrada/salida.
String
Crea objetos de tipo String y permite su manipulación.
MÉTODOS
readLine()
Indexof ()
FUNCIÓN
Se encarga de la lectura de toda la línea en el archivo indicado. Se encarga de devolver el índice de la primera aparición del objeto String especificado en la instancia en cuestión.
ExtraerCrea()
Encargado de la extracción de un párrafo para su modificación.
InsertarParrafo( )
Encargado de la inserción de un nuevo párrafo o modificación de uno ya existente,
OBJETOS
FUNCIÓN
salida
Guarda e indica el despliegue en pantalla del segundo archivo de texto creado.
fichero
Encargado de guardar el primer archivo de texto (ya existente) para ser eliminado.
f1
Guarda los nuevos datos introducidos al segundo archivo de texto creado.
f2
Guarda los datos del primer archivo de texto.
13
Este el primer dato que te pide el programa
Esta es la información desplegada en consola correspondiente a la presentada en la Web
14
15
16
17
Aquí el programa solicita al usuario a través de una interfaz gráfica introduzca el número correspondiente al párrafo donde va a agregar información
Luego el programa solicita al usuario a través de una interfaz gráfica escriba por medio del teclado el párrafo a agregar
Despúes de esto el programa solicita al usuario por medio de una interfaz gráfica introduzca el número correspondiente al párrafo que desea extraer en un documento de texto (.txt)
Luego de que el usuario por medio del teclado introduce los datos requeridos por el programa, el mismo muestra en pantalla lo siguiente:
18
Seguido de los mensajes el programa muestra los documentos de texto (.txt) creados
19
Este es el párrafo 4 que se escogió agregar (Primer documento de texto (.txt) creado)
20
Este es el párrafo que el usuario índico al programa deseaba extraer (Segundo documento de texto (.txt) creado)
21
Esta es la página web leída y modificada por el programa
22
23
24
DIAGRAMA UML DEL PROGRAMA class PrincipalLeeWeb
openConnection(); getInputStream() Indexof () JOptionPane.showMessageDialog() JOptionPane.showInputDialog() InsertarParrafo() ExtraerCrea() Main()
class ClaseNueva
openConnection() getInputStream()
Indexof () readLine() Indexof () ExtraerCrea() InsertarParrafo()
25
SIMILITUDES EN EL MANEJO DE FLUJOS Para: Captura desde el teclado, lectura de archivo de texto, lectura de recurso de la web, despliegue en consola. Entre las similitudes que encontré están algunas clases que se pueden utilizar en ambos casos a la ves, como: String, InputStreamReader y BufferedReader.
UTILIDAD PRÁCTICA DE LA CLASE U.R.L.
El poder identificar cualquier recurso accesible en la red, como por ejemplo, una página web, un documento, una dirección de correo, imagen, video, audio y texto.
26
REFLEXIÓN INDIVIDUAL SOBRE EL PROYECTO
Eufemia Buitrago La labor del otro integrante de mi grupo, al igual que siempre fue muy buena y eficiente. La parte más difícil para mi, como siempre fue la de comprender claramente lo que en realidad había que hacer. Como siempre trabajamos mi compañero y yo la metodología utilizada para realizar este programa y alcanzar eficientemente sus objetivos fue la de DIVIDE y VENCERAS. Para mi el nuevo conocimiento adquirido fue el de agregarle un párrafo a una página web ya existente. Entre los conocimientos previos esenciales e indispensables en este caso estuvo primordialmente el de CÓMO LEER UNA PÁGINA WEB. Pienso al igual que siempre que esta experiencia es muy importante para mi formación profesional ya que me hace dar un paso más y me prepara mejor (ayudándome a corregir mis errores) para la misma. Creo que la mayor utilidad de este trabajo es la de acrecentar mis conocimientos para el futuro en el campo laboral, específicamente en el desarrollo de software.
27
REFLEXIÓN INDIVIDUAL SOBRE EL PROYECTO
Félix Rivera La labor de la integrante de mi grupo, es muy colaborativa y creativa a su ves. En realidad yo no encontré mayor dificultad en la elaboración del programa antes presentado ya que todo lo que el mismo requería lo habíamos hecho de una u otra forma anteriormente. La metodología utilizada para alcanzar los objetivos de este programa DIVIDE y VENCERAS.
fue la de
Entre los nuevos conocimientos adquiridos no menciono ninguno ya que en realidad para mi acrecenté los ya obtenidos en otros laboratorios. Entre los conocimientos previos esenciales para la realización de este laboratorio puedo mencionar que son los obtenidos en general en todos los laboratorios anteriores. Esta experiencia es muy importante para mi formación profesional ya que me ayuda a aprender a hacer software más eficientes y con distintos programas a la ves. La mayor utilidad que ha tenido la creación de este trabajo es el de prepararme mejor en el ámbito profesional para el futuro.
iv
CONCLUSIONES
La clase U.R.L. pertenece al paquete java.net. La clase U.R.L. la utilizamos para acceder a determinado recurso de Internet o
para identificarlos.
v
WEBGRAFÍAS 1. http://www.dcc.uchile.cl/~psalinas/uml/modelo.html 2. http://www.clikear.com/manuales/uml/ 3. http://www.esnips.com/doc/5ae972fd-837f-4ab4-a3c0-e5a575567699/Tutorialde-UML/?widget=documentIcon
4. http://www.cica.es/formacion/Java Tut/Cap9/url.html 5. http://www.gaugeus.com/ramblings/2006/12/26/usando-clases-en-java-classusage-in-java