Anda di halaman 1dari 15

JAVA JSP ARCHIVOS SECUENCIALES PLANOS Existen adems muchas otras operaciones asociadas a archivos las ms elementales son:

1. Creacin de Archivo.- En este proceso se pretende solamente crear un archivo nuevo en disco, con su nombre, tipo y especialidad de almacenamiento de datos apropiado. 2. Apertura de Archivos.- En este caso se pretende abrir un archivo ya existente en disco para procesarlo, ya sea cargar o grabar datos en sus registros, o leer algn registro en especial para mandarlo a una variable de cualquier tipo. No confundir creacin con apertura creacin es un proceso que solo se ejecuta una sola vez en la vida de un archivo, mientras que apertura siempre se est realizando por los programas especializados en algn proceso. 3. Cierre de archivos: Es la operacin ms importante en cualquier programa que maneje archivos o se cierra el archivo como ltima instruccin del programa o se ver el anuncio ABORT, RETRY, FAIL. 98, /s, scandisk 4. Altas en archivo.- En este proceso se carga una clase en memoria con sus datos pertinentes y se graba la clase en el archivo en disco. 5. Lectura de archivo.- En este proceso, se abre el archivo y se manda el registro de disco, a una clase en memoria para su procesamiento. 6. Consulta de archivos: En este proceso se pretende desplegar todos los registros del archivo en disco a la pantalla ya sea consola o mejor an, a una pagina HTML
1

7. Bsqueda en archivos: Una de las operaciones ms comunes, consiste en que el usuario pide toda la informacin de algn rengln en disco, proporcionando la informacin de algn campo, generalmente el campo clave de la clase. 8. Filtros.- En este proceso el usuario est interesado en algn conjunto de renglones con caractersticas comunes (condicin), por ejemplo todos los alumnos de sistemas, o todos los empleados que ganen ms de $500.00 pesos, o todos los clientes que sean de Tijuana, etc. 9. Modificaciones de registros o archivos: Problema muy comn, donde los datos originales ya grabados se tienen que cambiar o actualizar, por ejemplo el nombre no era Juan es Juana, o la calificacin no es 100 es 20, etc. 10. Bajas de registros: tambin muy comn este proceso por ejemplo el alumno ya egreso, el cliente huyo, etc.

GRABACION ARCHIVO SECUENCIAL JAVA JSP Grabacin y lectura son los dos procesos ms comunes con archivos disco en cualquier lenguaje de programacin. Cdigo de grabacin: Prog17.jsp <%@ page import="java.io.*" %> <% // declarando int clave=0;String nombre=""; float estatura=0; // creando un objeto de tipo archivo DataOutputStream archivo = null; if(request.getParameter("INSERTAR") != null) { // capturando datos clave=Integer.parseInt(request.getParameter("CLAVE")); nombre=request.getParameter("NOMBRE"); estatura=Float.parseFloat(request.getParameter("ESTATURA")); try { // creando archivo en append archivo = new DataOutputStream(new FileOutputStream("c:\\archivo1.dat",true)); // grabando al archivo archivo.writeInt(clave); archivo.writeUTF(nombre); archivo.writeFloat(estatura); out.println(clave+": registro grabado"); } catch(FileNotFoundException fnfe) {} catch (IOException ioe) {}; // cerrando el archivo archivo.close(); }; // construyendo forma dinamica out.println("<FORM ACTION=prog17.jsp METHOD=post>"); out.println("CLAVE :<INPUT TYPE=TEXT NAME=CLAVE><BR>"); out.println("NOMBRE :<INPUT TYPE=TEXT NAME=NOMBRE><BR>"); out.println("ESTATURA :<INPUT TYPE=TEXT NAME=ESTATURA><BR>"); out.println("<INPUT TYPE=SUBMIT NAME=INSERTAR VALUE=GRABAR ><BR>"); out.println("</FORM>"); %> corrida:

Se usa una clase llamada FileOutputStream, especializada en archivos con muchos mtodos y constructores para crear, manipular y procesar archivos el constructor usado solo lleva dos parmetros, el primero todo la ruta o path a donde quedara el archivo(cuidado con no poner la doble diagonal \\) y el segundo parmetro es la palabra true, esto es para que el archivo se abra en modo llamado APPEND, es decir que cada nuevo registro se vaya escribiendo al final del archivo, si no se pone este parmetro(true), un nuevo registro se sobre escribira sobre el registro anterior. Sin embargo en el programa no se uso solo FILEOUTPUSTREAM ( solo para crear el archivo), tambin se usa DATAOUTPUTSTREAM, esta segunda clase es derivada de la anterior y comparte muchos de sus mtodos, la diferencia es que fileoutputstream est especializada en grabar y leer bytes, mientras que dataoutputstream est especializada en grabar y leer datos formateados, observar que los mtodos que uso el objeto archivo para grabar o almacenar datos se especializan en algn tipo de dato en especial. LECTURA ARCHIVO SECUENCIAL JAVA JSP El proceso de lectura de los registros de un archivo secuencial es realmente sencillo, como lo muestra el siguiente cdigo ejemplo; Prog18.jsp: <%@ page import="java.io.*" %> <% // declarando int clave=0;String nombre=""; float estatura=0; // creando un objeto de tipo archivo DataInputStream archivo = null; if(request.getParameter("LECTURA") != null) { // construyendo una tabla html out.println("<HTML><TABLE Border=10 CellPadding=5><TR>"); out.println("<th bgcolor=Green>CLAVE</th><th bgcolor=White>NOMBRE</th><th bgcolor=Red>ESTATURA</th></TR>"); try { // abriendo archivo archivo = new DataInputStream(new FileInputStream("c:\\archivo1.dat")); // ciclo de lectura del archivo while(true){ out.println("<TR>"); clave=archivo.readInt(); out.println("<TD>"+clave+"</TD>"); nombre=archivo.readUTF(); out.println("<TD>"+nombre+"</TD>"); estatura=archivo.readFloat(); out.println("<TD>"+estatura+"</TD>"); out.println("</TR>"); }} catch(FileNotFoundException fnfe) {} catch (IOException ioe) {}; archivo.close(); }; // construyendo forma dinamica out.println("<FORM ACTION=prog18.jsp METHOD=post>"); out.println("<INPUT TYPE=SUBMIT NAME=LECTURA VALUE=leer ><BR>");
4

out.println("</FORM>"); %> Corrida:

Notas:  Observar en cdigo que ahora se usan FILEINPUTSTREAM Y DATAINPUTSTREAM como clases.  En fileinputstream solo se uso el parmetro de abrir archivo (no el true de append) como ya se menciono estas clases se especializan en archivos secuenciales.  El ciclo de lectura se realiza con un while(true) BUSQUEDA ARCHIVOS SECUENCIALES JAVA JSP Recordar que existe una serie de procesos bsicos con archivos el famoso y antiguo ABC (altas, bajas, consultas y modificaciones) con ellos. Actualmente estos procesos o similares a ellos se llaman insertar, eliminar, editar, etc., en las modernas bases de datos pero esto lo analizaremos ms adelante. El primer proceso para un archivo secuencial es agregar una cantidad indefinida de registros al archivo este proceso se resuelve o ejecutando una cantidad indeterminada de veces el programa de grabacin ya hecho o incluir un ciclo while en el mismo programa. Un segundo proceso tambin comn, llamado consulta es desplegar todos los registros del archivo a la vez problema tambin resuelto en el programa de lectura. El tercer Proceso que resolvemos en este tema es la bsqueda de un registro determinado, en este proceso el usuario del programa quiere que se despliegue un y solo un registro de informacin, proporcionando un dato de bsqueda, generalmente la clave del registro. La solucin es sencilla, solo tenemos que abrir el archivo para lectura, hacer un ciclo while(true) condicionar y solo desplegar el registro cuando se cumpla la condicin. Cdigo prog19.Java: <%@ page import="java.io.*" %> <% // declarando int clave=0;int claveb=0;String nombre=""; float estatura=0; // creando un objeto de tipo archivo DataInputStream archivo = null; if(request.getParameter("BUSCAR") != null)
5

{ // construyendo tabla html out.println("<HTML><TABLE Border=10 CellPadding=5><TR>"); out.println("<th bgcolor=Green>CLAVE</th><th bgcolor=White>NOMBRE</th><th bgcolor=Red>ESTATURA</th></TR>"); // capturando clave a buscar claveb=Integer.parseInt(request.getParameter("CLAVEB")); try { // abriendo archivo archivo = new DataInputStream(new FileInputStream("c:\\archivo1.dat")); while(true){ clave=archivo.readInt(); nombre=archivo.readUTF(); estatura=archivo.readFloat(); if (claveb==clave){ out.println("<TR>"); out.println("<TD>"+clave+"</TD>"); out.println("<TD>"+nombre+"</TD>"); out.println("<TD>"+estatura+"</TD>"); out.println("</TR>"); }}} catch(FileNotFoundException fnfe) {} catch (IOException ioe) {}; archivo.close(); }; // construyendo forma dinamica out.println("<FORM ACTION=prog19.jsp METHOD=post>"); out.println("CLAVE BUSCAR:<INPUT TYPE=TEXT NAME=CLAVEB><BR>"); out.println("<INPUT TYPE=SUBMIT NAME=BUSCAR VALUE=buscar><BR>"); out.println("</FORM>"); %> Corrida programa java:

JAVA JSP FILTROS o CONDICIONES Como su nombre lo indica en este proceso se pretende desplegar todo un conjunto de renglones que cumplan con la condicin por ejemplo se pide desplegar todos los alumnos de sistemas o todos los empleados que sean de Sinaloa, etc. Filtros se usan para obtener informacin acerca de un subconjunto de renglones del archivo.
6

Cdigo prog20.jsp <%@ page import="java.io.*" %> <% // declarando int clave=0;float est=0;String nombre=""; float estatura=0; // creando un objeto de tipo archivo DataInputStream archivo = null; if(request.getParameter("FILTRAR") != null) { // construyendo tabla html out.println("<HTML><TABLE Border=10 CellPadding=5><TR>"); out.println("<th bgcolor=Green>CLAVE</th><th bgcolor=White>NOMBRE</th><th bgcolor=Red>ESTATURA</th></TR>"); // capturando filtro est=Float.parseFloat(request.getParameter("ESTATURA")); try { // abriendo archivo archivo = new DataInputStream(new FileInputStream("c:\\archivo1.dat")); while(true){ clave=archivo.readInt(); nombre=archivo.readUTF(); estatura=archivo.readFloat(); if (estatura>=est){ out.println("<TR>"); out.println("<TD>"+clave+"</TD>"); out.println("<TD>"+nombre+"</TD>"); out.println("<TD>"+estatura+"</TD>"); out.println("</TR>"); }}} catch(FileNotFoundException fnfe) {} catch (IOException ioe) {}; archivo.close(); }; // construyendo forma dinamica out.println("<FORM ACTION=prog20.jsp METHOD=post>"); out.println("ESTATURA >=:<INPUT TYPE=TEXT NAME=ESTATURA><BR>"); out.println("<INPUT TYPE=SUBMIT NAME=FILTRAR VALUE=Filtrar><BR>"); out.println("</FORM>"); %> Corrida filtro:

JAVA JSP BAJA O ELIMINACION ARCHIVO SECUENCIAL Eliminar o dar de baja en un archivo secuencial, implica tener que estar procesando dos archivos a la vez, el segundo de ellos es un archivo temporal, un algoritmo de eliminacin fsica quedara como: Procedimiento: 1. Abrir el archivo original en modo lectura. 2. Abrir un archivo llamado temporal en modo escritura. 3. Iniciar un ciclo de lectura del archivo original. a. Dentro del ciclo leer el primer registro. b. Validar el registro si no es eliminable, se escribe al archivo temporal. c. Fin de ciclo (cerrar el ciclo). 4. Cerrar ambos archivos. 5. Eliminar el archivo original. 6. Renombrar el archivo temporal con el nombre de archivo original. Una segunda tcnica, consiste en agregar un campo de estado (status) al registro, tal como se vio en el curso anterior: Sin embargo el proceso de baja se tiene que realizar en un sistema de informacin, para resolver este problema la respuesta es agregar un campo especial llamado status que puede ser de tipo char, con algunos caracteres de control que se puedan cargar en el por ejemplo una 'a' significa que est en alta, una 'b' significa que est en baja, etc. Lo nico que se tiene que hacer, es que cuando se agrega o manda el registro por primera vez a disco, mandarlo cargado el campo de status con 'a' y estar validando con if siempre este campo en cualquier proceso de bsqueda o condicin o despliegue, si se encuentra cargado con 'b' entonces solo avisar al usuario que est de baja dicho registro. A continuacin damos un ejemplo de eliminacin fsica: Prog21 jsp <%@ page import="java.io.*" %> <% // declarando int clave=0;int claveb=0;String nombre=""; float estatura=0; // creando un objeto de tipo archivo DataInputStream archivo = null; DataOutputStream archivot = null; if(request.getParameter("ELIMINAR") != null) { // capturando clave a eliminar claveb=Integer.parseInt(request.getParameter("CLAVEB")); try { // abriendo archivos archivo = new DataInputStream(new FileInputStream("c:\\archivo1.dat")); archivot = new DataOutputStream(new FileOutputStream("c:\\temp.dat",true)); while(true){ clave=archivo.readInt(); nombre=archivo.readUTF(); estatura=archivo.readFloat();
8

if (claveb!=clave){ archivot.writeInt(clave); archivot.writeUTF(nombre); archivot.writeFloat(estatura); }}} catch(FileNotFoundException fnfe) {} catch (IOException ioe) {}; // cerrando archivos archivo.close(); archivot.close(); // eliminando original renombrando temporal File file1 = new File("c:\\archivo1.dat"); File file2 = new File("c:\\temp.dat"); if (file1.exists()) {file1.delete();}; file2.renameTo(file1); // avisando out.println("REGISTRO ELIMINADO"); }; // construyendo forma dinamica out.println("<FORM ACTION=prog21.jsp METHOD=post>"); out.println("CLAVE ELIMINAR:<INPUT TYPE=TEXT NAME=CLAVEB><BR>"); out.println("<INPUT TYPE=SUBMIT NAME=ELIMINAR VALUE=Eliminar><BR>"); out.println("</FORM>"); %> corrida:

OPERACIONES CON CAMPOS JAVA JSP Este es tambin un caso comn con los elementos de un archivo, sin embargo es tambin fcil de resolver. Solo usar los dos archivos el original y el temporal y antes de grabarse al temporal hacer la operacin correspondiente, como lo muestra el siguiente ejemplo. Prog22.jsp <%@ page import="java.io.*" %> <% // declarando int clave=0;String nombre=""; float estatura=0; // creando dos objetos de tipo archivo uno para escritura y otro para lectura DataInputStream archivo = null; DataOutputStream archivot = null; if(request.getParameter("SUMAR") != null) { try { // abriendo archivos
9

archivo = new DataInputStream(new FileInputStream("c:\\archivo1.dat")); archivot = new DataOutputStream(new FileOutputStream("c:\\temp.dat",true)); while(true){ clave=archivo.readInt(); nombre=archivo.readUTF(); estatura=archivo.readFloat(); // sumando estatura = estatura + 5; // grabando a temporal archivot.writeInt(clave); archivot.writeUTF(nombre); archivot.writeFloat(estatura); }} catch(FileNotFoundException fnfe) {} catch (IOException ioe) {}; // cerrando archivos archivo.close(); archivot.close(); // eliminando original renombrando temporal File file1 = new File("c:\\archivo1.dat"); File file2 = new File("c:\\temp.dat"); if (file1.exists()) {file1.delete();}; file2.renameTo(file1); // avisando out.println("ESTATURAS SUMADAS "); }; // construyendo forma dinamica out.println("<FORM ACTION=prog22.jsp METHOD=post>"); out.println("<INPUT TYPE=SUBMIT NAME=SUMAR VALUE=EST+5><BR>"); out.println("</FORM>"); %> corrida

Corrida prog18.jsp

10

EDICION DE REGISTROS JAVA JSP Editar registros significa cambiar el contenido de algunos de los campos o columnas por nueva informacin o para corregir algn error de captura original o para agregar alguna columna que no exista por modificacin de la tabla o la base de datos. La solucin es similar a los temas anteriores, es decir se ocupan los dos archivos el original y el temporal y ya sea que se modifique una sola clave o se modifiquen todos los registros, el ejemplo que se construye va mostrando los registros del archivo y pregunta y modifica o edita el registro pedido. Prog23.jsp <%@ page import="java.io.*" %> <% // declarando int clave=0;int claveb=0;String nombre=""; float estatura=0; // creando un objeto de tipo archivo DataInputStream archivo = null; DataOutputStream archivot = null; // cdigo de bsqueda String temp1=request.getParameter("BUSCAR"); if(temp1==null)temp1=" "; if(temp1.compareTo("buscar")==0) { // capturando clave a buscar claveb=Integer.parseInt(request.getParameter("CLAVEB")); try { // abriendo archivo archivo = new DataInputStream(new FileInputStream("c:\\archivo1.dat")); while(true){ clave=archivo.readInt(); nombre=archivo.readUTF(); estatura=archivo.readFloat(); if (claveb==clave){ out.println("<FORM ACTION=prog23.jsp METHOD=post>"); out.println("CLAVE :<INPUT TYPE=TEXT NAME=CLAVE value="+clave+"><BR>"); out.println("<INPUT TYPE=HIDDEN NAME=CLAVEB value="+claveb+"><BR>"); out.println("NOMBRE :<INPUT TYPE=TEXT NAME=NOMBRE value=\""+nombre+"\"><BR>"); out.println("ESTATURA :<INPUT TYPE=TEXT NAME=ESTATURA value="+estatura+"><BR>"); out.println("<INPUT TYPE=SUBMIT NAME=EDITAR VALUE=editar><BR>"); out.println("</FORM>"); } }} catch(FileNotFoundException fnfe) {} catch (IOException ioe) {}; archivo.close(); }; // codigo de edicion String temp2=request.getParameter("EDITAR"); if(temp2==null)temp2=" "; if(temp2.compareTo("editar")==0){
11

try { // abriendo archivos archivo = new DataInputStream(new FileInputStream("c:\\archivo1.dat")); archivot = new DataOutputStream(new FileOutputStream("c:\\temp.dat",true)); // cargando clave de edicin claveb=Integer.parseInt(request.getParameter("CLAVEB")); while(true){ clave=archivo.readInt(); nombre=archivo.readUTF(); estatura=archivo.readFloat(); if (claveb != clave){ archivot.writeInt(clave); archivot.writeUTF(nombre); archivot.writeFloat(estatura); } else{ // capturando y grabando nuevos datos clave=Integer.parseInt(request.getParameter("CLAVE")); nombre=request.getParameter("NOMBRE"); estatura=Float.parseFloat(request.getParameter("ESTATURA")); archivot.writeInt(clave); archivot.writeUTF(nombre); archivot.writeFloat(estatura); }; }} catch(FileNotFoundException fnfe) {} catch (IOException ioe) {}; // cerrando archivos archivo.close(); archivot.close(); // eliminando original renombrando temporal File file1 = new File("c:\\archivo1.dat"); File file2 = new File("c:\\temp.dat"); if (file1.exists()) {file1.delete();}; file2.renameTo(file1); // avisando out.println("REGISTRO EDITADO"); }; // construyendo forma dinamica out.println("<FORM ACTION=prog23.jsp METHOD=post>"); out.println("CLAVE ELIMINAR:<INPUT TYPE=TEXT NAME=CLAVEB><BR>"); out.println("<INPUT TYPE=SUBMIT NAME=BUSCAR VALUE=buscar><BR>"); out.println("</FORM>"); %>

12

Corrida:

13

GRAFICOS JAVA JSP Campos de grficos o de imgenes se han convertido en elementos importantes de cualquier base de datos. Para manejar este elemento: 1. 1.- Es un mtodo sencillo, primero subir las imgenes (de preferencia jpg) con un ftp normal a tu sitio y al folder principal de el servidor, en este caso ROOT (para el lws). 2. 2.- Usar el tag <img src> de HTML EN EL PROGRAMA jsp. 3. 3.- agregar un campo de string llamado foto url o foto o url al registro en el archivo secuencial y cargarlo con el nombre de la imagen por ejemplo pato.jpg, MUCHO OJO este paso exige que se tengan que reconstruir todos los programas anteriores para incluir este nuevo campo y volver a crear los archivos de ejemplos. prog24.jsp <%@ page import="java.io.*" %> <% // Declarando int clave=0;int claveb=0;String nombre=""; float estatura=0;String foto=""; // creando un objeto de tipo archivo DataInputStream archivo = null; if(request.getParameter("BUSCAR") != null) { // construyendo tabla html out.println("<HTML><TABLE Border=10 CellPadding=5><TR>"); out.println("<th bgcolor=Green>CLAVE</th><th bgcolor=White>NOMBRE</th><th bgcolor=Red>ESTATURA</th><th>FOTOGRAFIA</TH></TR>"); // capturando clave a buscar claveb=Integer.parseInt(request.getParameter("CLAVEB")); try { // abriendo archivo archivo = new DataInputStream(new FileInputStream("c:\\archivo1.dat")); while(true){ clave=archivo.readInt(); nombre=archivo.readUTF(); estatura=archivo.readFloat(); foto=archivo.readUTF(); if (claveb==clave){ out.println("<TR>"); out.println("<TD>"+clave+"</TD>"); out.println("<TD>"+nombre+"</TD>"); out.println("<TD>"+estatura+"</TD>"); out.println("<TD><img src=http:\\\\localhost\\progs\\"+foto+"></TD>"); out.println("</TR>"); }}} catch(FileNotFoundException fnfe) {} catch (IOException ioe) {}; archivo.close(); }; // construyendo forma dinamica out.println("<FORM ACTION=prog24.jsp METHOD=post>"); out.println("CLAVE BUSCAR:<INPUT TYPE=TEXT NAME=CLAVEB><BR>"); out.println("<INPUT TYPE=SUBMIT NAME=BUSCAR VALUE=buscar><BR>");
14

out.println("</FORM>"); %> Nota: Observar que en img src debe ir la direccin internet del servidor por ejemplo http:\\misitio.com\pato.jpg, sin embargo en el programa se est usando http:\\\\localhost\\pato.jpg, en cuanto a localhost se puede sustituir por el dominio ejemplo laurosoto.com, y en cuanto porque se usaron cuatro \\ recordar que en java dentro de una string las secuencias de escape ( \a, \r etc.) van precedidas del smbolo \, por esa causa para mandar un \ a la pagina se tiene que usar la secuencia de escape y como la direccin inclua al principio y una diagonal \ al final se mandaron \\ y respectivamente. Corrida:

15

Anda mungkin juga menyukai