0% encontró este documento útil (0 votos)
100 vistas38 páginas

Taller de Gestión de Archivos en Java

Este documento propone un taller para realizar la gestión de un archivo de datos llamado "Cuenta" que contiene información de clientes bancarios. Se recomienda usar las clases FileInputStream, FileOutputStream y ArrayList de Java. Se propone crear clases para validar datos, representar la estructura de información de Cuenta, y administrar los registros en memoria mediante ArrayList, permitiendo lectura, escritura y manipulación de los datos del archivo Cuenta.

Cargado por

Mario Contreras
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
100 vistas38 páginas

Taller de Gestión de Archivos en Java

Este documento propone un taller para realizar la gestión de un archivo de datos llamado "Cuenta" que contiene información de clientes bancarios. Se recomienda usar las clases FileInputStream, FileOutputStream y ArrayList de Java. Se propone crear clases para validar datos, representar la estructura de información de Cuenta, y administrar los registros en memoria mediante ArrayList, permitiendo lectura, escritura y manipulación de los datos del archivo Cuenta.

Cargado por

Mario Contreras
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

TALLER PROPUESTO

Figura. Diagrama de Pasada


Dado un archivo de datos Cuenta cuya estructura de información es:
Cuenta {
int numero;
String nombre;
int saldo;
String ciudad;
String domicilio;
}
Realizar:
- Lectura
- Gestión de registros (adición, edición, borrado, consulta) en memoria. Cada
dominio de datos de campo debe corresponder a una lista de valores: Lista1
representa dominio de valores de numero, Lista2 representa dominio de valores de
nombre, Lista3 representa dominio de valores de saldo y así sucesivamente. Un
registro representa la intersección de posición de cada lista. Ejemplo: el registro
uno se representa como Lista1 (1)+Lista2 (1)+Lista3 (1)+Lista4 (1)+Lista5 (1).
- Grabar o escribir en el archivo Cuenta una vez terminada la sesión.

N.B Para este taller se recomienda hacer uso de las clases:


FileInputStream : lectura de archivo Cuenta
FileOutputStream : escritura de archivo Cuenta
ArrayList: Listas que representan el dominio de valores de cada campo
CLASE ArrayList

Un ArrayList es un arreglo dinámico. No tiene restricciones de capacidad. Su tamaño se


ajusta de forma dinámica.
• Los elementos dentro de un ArrayList son Objetos. No pueden ser de tipo básico, pero
pueden ser de cualquier tipo de objeto.
• Constructor:
Por defecto:
ArrayList Obj=new ArrayList().

De tipo objeto:

ArrayList <clase> Obj = new ArrayList ( );

Ejemplo:

ArrayList <String > Obj = new ArrayList ( );

• La clase ArrayList forma parte del paquete java.util

METODOS

• int size(). El tamaño actual. Inicialmente, el tamaño de un ArrayList es 0.


• void add(obj). Añade un objeto al final del ArrayList, incrementando su tamaño en 1. obj
es un objeto.
• Object get(N). Devuelve el elemento almacenado a la posición N en el ArrayList.
N tiene que ser un entero entre 0 y size()-1.
• void set(index, obj). Sustituye el elemento en la posición index por el objeto obj.
(index tiene que ser entre 0 y size()-1) dentro del ArrayList, sustituyendo el elemento
previamente almacenado a la posición N. Es equivalente a A[N] = obj para un arreglo A.
• Object remove(index). Elimina el elemento a la posición index (index entre 0 y size()-1).
Devuelve el objeto eliminado. El tamaño del ArrayList disminuye en 1.
• int indexOf(obj). Busca el objeto obj dentro del ArrayList, y si lo encuentra, devuelve la
posición donde lo ha encontrado. Si no, devuelve -1.
TALLER DESARROLLO DE SOFTWARE CON NETBEANS 8.0

PRIMERA PARTE. GESTION DE ARCHIVOS

PRIMER MOMENTO. CREACION DE PROYECTO EN PLATAFORMA NETBEANS

Ejecutar
Seleccionar File>>New Project…

Se va a crear un nuevo proyecto. Seleccionar y picar sobre el icono

Se debe seleccionar Java de la ventana de categorías

Ahora, se selecciona Java Application de tipo de proyecto. Pulsar el Botón Next


Nombre del Proyecto: Archivo

Chequee . Pulsar el Botón Finish

El Netbeans genera la estructura de un proyecto con:

- Paquete de Programas Fuentes(SourcePackages):: archivo

- Programa Principal:: Archivo.java


SEGUNDO MOMENTO. CREACION DE UNA CLASE BASE PARA VALIDAR DATOS

Se debe posiciona sobre el paquete archivo y pulsar el botón derecho del mouse>>opción
new>>Java Class

La clase base sobre la que se va a trabajar se denomina Token, por tanto:

Nombre de la Clase: Token

Pulsar el Botón Finish

La clase Token debe cumplir:

- Definición de Variables

- Método Constructor con un argumento String (String )

- Métodos de la clase como: Titulada, Numero, Parrafo, Fecha


Primer Paso Colocar las bibliotecas de clase (import ) necesarias. La declaración de
bibliotecas de clases se debe colocar antes del public classToken así:

Entonces, coloque antes de la línea public classToken:

import java.text.*;
import java.util.*;

Segundo Paso Colocar Variables. La definición de la variables se deben colocar después


de public classToken {

int i;
boolean es;
StringBuilder B;
String P;

Tercer Pasó Métodos de la clase. Colocar después la declaración de variables lo


siguiente:

// Método que verifica si todos los caracteres son letras letras


boolean soloLetra(String P)
{
es=true;
for(i=0;i<P.length();i++)
if(!Character.isLetter(P.charAt(i)))
{
es=false;
}
return es;
}
// Método que verifica si todos los caracteres son letras minuscula
boolean soloMinuscula(String P)
{
es=true;
for(i=0;i<P.length();i++)
if(!Character.isLetter(P.charAt(i)) || !Character.isLowerCase(P.charAt(i)))
{
es=false;
}
return es;
}
// Método que verifica si todos los caracteres son digitos
boolean soloDigito(String P)
{
es=true;
B=new StringBuilder ();
for(i=0;i<P.length();i++)
if(!Character.isDigit(P.charAt(i)))
{
es=false;
}
return es;
}
boolean soloFecha(String P)
{
DateFormat FormatoFecha=DateFormat.getDateInstance(DateFormat.SHORT, new
Locale("es"));
if (P == null)
return false;
FormatoFecha.setLenient(false);
try {
FormatoFecha.parse(P.trim());
}
catch (ParseException pe)
{
return false;
}
return true;
}
boolean soloTitulada(String P)
{
es=true;
for(i=0;i<P.length() &&es;i++)
if(Character.isLetter(P.charAt(i)))
{
if(i==0) // Si es la primera letra
{
if(!Character.isUpperCase(P.charAt(i)))
es=false;
}
else // No es la primera letra
if(!Character.isLowerCase(P.charAt(i)))
es=false;
}
else
es=false;
return es;
}
boolean parrafoTitulada(String T)
{
String A[]=T.split(" ");
boolean parrafo=true;
for(i=0;i<A.length;i++)
parrafo=parrafo&&soloTitulada(A[i]);
return parrafo;
}

Quedando:
TERCER MOMENTO. CREACIÓN DE ARCHIVO DE DATOS

Sobre el paquete archivo pulsar el botón derecho del mouse>>New>>Other

Seleccionar Categoria>>Other>>File Type>>Empty File

Pulsar el Botón Next

Nombre del Archivo: Cuenta. Pulsar el Botón Finish

Pulsar el Botón Finish


Aparece la ventana de Archivo Vacio(Empty File)

Pegar los registros:

777,Laura Acuña,500000,Bogota,Caracas;888,Martha
Valero,333333,Medellin,Nutibara;999,Mario Contreras,50505050,Cali,Unicentro

Quedando:

Análisis:

- El ultimo registro no termina en ; (punto y coma)


- El ultimo campo posteriormente no tiene , (coma)
CUARTO MOMENTO. CREACION DE LA CLASE ESTRUCTURA DE INFORMACION

Se diseña una clase que solo tenga las variables de la clase Cuenta (numero, nombre,
saldo, ciudad, domicilio) entonces:

Se debe posiciona sobre el paquete archivo y pulsar el botón derecho del mouse>>opción
new>>Java Class

La clase estructura de información sobre la que se va a trabajar se denomina Cuenta, por


tanto:

Nombre de la Clase: Cuenta. Pulsar el Botón Finish


El Netbeans genera:

La definición de la variables se deben colocar después de public class Cuenta {

String numero;
String nombre;
String saldo;
String ciudad;
String domicilio;

Quedando:
QUINTO MOMENTO. ADMINISTRADOR EN MEMORIA DEL ARCHIVO CUENTA

Se diseña una clase que administre en memoria por medio de un ArrayList (cada posición
es un objeto cuenta) los registros del archivo Cuenta entonces:

Se debe posiciona sobre el paquete archivo y pulsar el botón derecho del mouse>>opción
new>>Java Class

El nombre de la clase es Cuentas

Pulsar el botón Finish

Colocar después de package archivo; el siguiente código:

import java.io.*;
import java.util.*;
import javax.swing.*;

Quedando:
Colocar después de public class Cuentas{ lo siguiente:

ArrayList<String > Lista1=new ArrayList();


ArrayList<String > Lista2=new ArrayList();
ArrayList<String > Lista3=new ArrayList();
ArrayList<String > Lista4=new ArrayList();
ArrayList<String > Lista5=new ArrayList();
int i,j,k;
Cuenta C=new Cuenta();
Token T=new Token();
Quedando:

Coloque el puntero del mouse después de la línea Token T=new Token(); si es necesario
inserte una línea.
Pegar los siguientes Métodos para Manipulación de archivos:

boolean lecturaArchivo()
{
StringBuilder linea=new StringBuilder();
File arch=new File ("src/archivo/cuenta");
if(!arch.exists())
{
System.out.println("El archivo no existe");
return false;
}
try
{
FileInputStream in = new FileInputStream(arch);
int c;
while((c=in.read())!=-1){
linea.append((char)c);
}
in.close();
}
catch(IOException e){return false; }
System.out.println(linea);
String A[];
String B[];
A=linea.toString ().split(";");
for(k=0;k<A.length;k++)
{
B=A[k].split(",");
System.out.println(A[k]);
for(i=0;i<B.length;i++)
switch(i)
{
case 0: Lista1.add(B[i]);
break;
case 1: Lista2.add(B[i]);
break;
case 2: Lista3.add(B[i]);
break;
case 3: Lista4.add(B[i]);
break;
case 4: Lista5.add(B[i]);
break;
}
}
return true;
}
void guardarArchivo()
{
boolean primero=false;
StringBuilder B=new StringBuilder();
for(i=0;i<Lista1.size();i++)
{
if(primero)
B.append(";");
primero=true;
registro(B,Lista1,true,i);
registro(B,Lista2,true,i);
registro(B,Lista3,true,i);
registro(B,Lista4,true,i);
registro(B,Lista5,false,i);
}
File arch=new File("src/archivo/cuenta");
try
{
FileOutputStream out = new FileOutputStream(arch);
for(i=0;i<B.toString ().length();i++)
out.write((byte) B.toString ().charAt(i));
out.close();
}
catch(IOException e){ }
}
void registro(StringBuilder H,ArrayList P,boolean coma,int j)
{
H.append(P.get(j));
if(coma)
H.append(",");
}
Quedando:
Abrir una línea en blanco después del método registro

Pegar los siguientes Métodos para validación y captura de datos (registro lógico):
boolean validar()
{
boolean es=true;
es=es && T.parrafoTitulada(C.nombre) && C.nombre.trim().length()>0;
es=es && T.parrafoTitulada(C.ciudad) && C.ciudad.trim().length()>0;
es=es && T.soloDigito(C.saldo) && C.saldo.trim().length()>0;
es=es && C.domicilio.trim().length()>0;
return es;
}
void captura()
{
do
{
C.nombre=JOptionPane.showInputDialog(null,"Nombre: ",C.nombre);
C.ciudad=JOptionPane.showInputDialog(null,"ciudad: ",C.ciudad);
C.saldo=JOptionPane.showInputDialog(null,"saldo: ",C.saldo);
C.domicilio=JOptionPane.showInputDialog(null,"Domicilio: ",C.domicilio);
}
while(!validar());
}
void capturaID()
{
do
{
C.numero=JOptionPane.showInputDialog(null,"numero: ",C.numero);
}
while(!T.soloDigito(C.numero) || C.numero.trim().length()==0);
}
Abrir una línea en blanco después del método CapturaID

Pegar los siguientes Métodos para la gestión de las Listas:


int existe(String cuenta)
{
return Lista1.indexOf(cuenta);
}
void descargar(int k)
{
C.nombre=Lista2.get(k);
C.saldo=Lista3.get(k);
C.ciudad=Lista4.get(k);
C.domicilio=Lista5.get(k);
}
void mostrar()
{
String S="";
S=S+"Numero: "+C.numero+"\n";
S=S+"Nombre: "+C.nombre+"\n";
S=S+"Saldo: "+C.saldo+"\n";
S=S+"Ciudad: "+C.ciudad+"\n";
S=S+"Domicilio: "+C.domicilio+"\n";
JOptionPane.showMessageDialog(null,S);
}
void adicion()
{
capturaID();
if(existe(C.numero)==-1)
{
C.nombre="";
C.saldo="";
C.ciudad="";
C.domicilio="";
captura();
Lista1.add(C.numero);
Lista2.add(C.nombre);
Lista3.add(C.saldo);
Lista4.add(C.ciudad);
Lista5.add(C.domicilio);
}
}
void edicion()
{
capturaID();
k=existe(C.numero);
if(k>-1)
{
descargar(k);
captura();
Lista2.set(k,C.nombre);
Lista3.set(k,C.saldo);
Lista4.set(k,C.ciudad);
Lista5.set(k,C.domicilio);
}
}
void borrar()
{
capturaID();
k=existe(C.numero);
if(k>-1)
{
Lista1.remove(k);
Lista2.remove(k);
Lista3.remove(k);
Lista4.remove(k);
Lista5.remove(k);
}
}
void consulta()
{
capturaID();
k=existe(C.numero);
if(k>-1)
{
descargar(k);
mostrar();
}
}
SEXTO MOMENTO. CREACION DE LA CLASE VISTA

Se diseña una clase que provea la interface grafica para poder realizar las operaciones de
Cuentas mediante un Menú.

Se debe posicionar sobre el paquete archivo y pulsar el botón derecho del


mouse>>opción new>>Java Class

El nombre de la clase es Menu

Pulsar el Botón Finish

Colocar antes de public class Menu {

import javax.swing.*;
El siguiente método se debe colocar después de public class Menu {

void opciones()
{
int i,opc,cuenta;
Cuentas A=new Cuentas();
A.lecturaArchivo();
Object [] valores = {"1. Adicion","2. Borrar","3. Edicion","4. Consulta","5.Salir"};
do
{
String resp=(String ) JOptionPane.showInputDialog(null,"Elija la Opcion", "Entrada
de datos",JOptionPane.QUESTION_MESSAGE, null, valores,valores[0]);
opc=Character.digit(resp.charAt(0),10);
switch(opc)
{
case 1:
A.adicion();
break;
case 2:
A.borrar();
break;
case 3:
A.edicion();
break;
case 4:
A.consulta();
break;
}
}
while(opc!=5);
A.guardarArchivo();
Quedando:
SEPTIMO MOMENTO ACTUALIZAR LA CLASE Archivo.java

Seleccione la clase Archivo.java del proyecto y de doble click

Escriba lo siguiente en // TODO code application logic here


Menu M=new Menu();
M.opciones();

Pulsar la tecla F6 o el botón


El archivo posee los siguientes registros:

Debe adicionar un registro:


111,Pedro Ramirez,2222222,Cartagena,La Popa

Al salir y retornar debe aparecer:


SEGUNDO PARTE. SELECCION DE ARCHIVOS POR MEDIO DE UNA
VENTANA DE DIALOGO (JFileChooser)

PRIMER MOMENTO. ADAPTAR LECTURA Y ESCRITURA DE ARCHIVOS


PARAMETRO FILE

Seleccione el programa java Cuentas del proyecto

Se deben reemplazar los dos métodos de manipulación de archivos como lecturaArchivo()


y guardarArchivo() para que reciba como parámetro un objeto File.

Elimine el método…
Coloque el método boolean lecturaArchivo()…

boolean lecturaArchivo(File arch)


{
StringBuilder linea=new StringBuilder();
if(!arch.exists())
{
System.out.println("El archivo no existe");
return false;
}
try
{
FileInputStream in = new FileInputStream(arch);
int c;
while((c=in.read())!=-1){
linea.append((char)c);
}
in.close();
}
catch(IOException e){return false; }
System.out.println(linea);
String A[];
String B[];
A=linea.toString().split(";");
for(k=0;k<A.length;k++)
{
B=A[k].split(",");
System.out.println(A[k]);
for(i=0;i<B.length;i++)
switch(i)
{
case 0: Lista1.add(B[i]);
break;
case 1: Lista2.add(B[i]);
break;
case 2: Lista3.add(B[i]);
break;
case 3: Lista4.add(B[i]);
break;
case 4: Lista5.add(B[i]);
break;
}
}
return true;
}
Ahora, sitúese en el método método guardarArchivo().

Elimine el método…
Y coloque el método guardarArchivo

void guardarArchivo(File arch)


{
boolean primero=false;
StringBuilder B=new StringBuilder();
for(i=0;i<Lista1.size();i++)
{
if(primero)
B.append(";");
primero=true;
registro(B,Lista1,true,i);
registro(B,Lista2,true,i);
registro(B,Lista3,true,i);
registro(B,Lista4,true,i);
registro(B,Lista5,false,i);
}
try
{
FileOutputStream out = new FileOutputStream(arch);
for(i=0;i<B.toString().length();i++)
out.write((byte) B.toString().charAt(i));
out.close();
}
catch(IOException e){ }
}
SEGUNDO MOMENTO CREACION DE LA CLASE FILTRO

Se debe posiciona sobre el paquete archivo y pulsar el botón derecho del mouse>>opción
new>>Java Class

La clase base sobre la que se va a trabajar se denomina Filtro, por tanto:

Nombre de la Clase: Filtro

Pulsar el Botón Finish


El Netbeans genera:

Una clase publica Filtro que se encuentra en el paquete de clases denominada archivo.

La clase Filtro debe cumplir:

- Definición de Variables

- Extender la clase abstracta FileFilter

- Método Constructor con un argumento String(String)

- Métodos de la clase como: accept , getDescription

Primer Paso Colocar las bibliotecas de clase (import) necesarias. La declaración de


bibliotecas de clases se debe colocar antes del public class Fitro así:

Entonces, coloque

import java.io.*;

antes de la línea public class Filtro


También se debe extender la clase abstracta FileFilter asi:

Entonces después de class Filtro coloque extends javax.swing.filechooser.FileFilter

Segundo Paso Colocar Variables. La definición de la variables String ext; se deben


colocar después de class Filtro extends javax.swing.filechooser.FileFilter{ quedando:

public class Filtro extends javax.swing.filechooser.FileFilter


{
String ext;
}

Tercer Paso. Generar el método constructor.

Después de la declaración del objeto ext se coloca el constructor:

public Filtro(String ext)


{
this.ext = "." + ext;
}
Cuarto Pasó Métodos de la clase. Colocar después del método constructor los siguientes
métodos:

public boolean accept(File f)


{
return f.isDirectory() || f.getAbsolutePath().endsWith(ext);
}
public String getDescription()
{
return "Todos los Archivos con extension "+ext;
}
Quedando:
TERCER MOMENTO ADAPTAR LA CLASE VISTA A LA CLASE FILTRO

Seleccione el programa java Menu del proyecto

Adicione el import para el manejo de archivos:

import java.io.*;

Se debe adaptar la clase Menu al manejo de ventanas y selección de archivos mediante


la clase Filtro y la clase JFileChooser, por tanto, deje la clase Menu asi:

Ahora, coloque las siguientes sentencias como parte de la clase Menu ( o sea después de
la sentencia public Class Menu { )

File file=null;
public void ventana()
{
Filtro filtro=new Filtro("dat");
JFileChooser fileChooser = new JFileChooser();
fileChooser.setCurrentDirectory(new File(System.getProperty("user.dir")));
fileChooser.setFileFilter(filtro);
int result = fileChooser.showOpenDialog(null);
if (result == JFileChooser.APPROVE_OPTION)
{
file = fileChooser.getSelectedFile();
if (file == null)
{
JOptionPane.showMessageDialog(null,"No se ha seleccionado ningua archivo");
}
if (file.getName().equals(""))
{
JOptionPane.showMessageDialog(null,"No se ha seleccionado ningua archivo");
file=null;
}
if(!filtro.accept(file))
{
JOptionPane.showMessageDialog(null,"El Archivo no es cuenta.dat");
file=null;
}
if (file.exists()) {
JOptionPane.showMessageDialog(null,"\n Nombre del Archivo: " + file.getName()+"\n
Camino : " + file.getPath()+("\n Camino Absoluto : " + file.getAbsolutePath()+"\n
Modificable : " + file.canWrite()+"\n Lectura : " + file.canRead()+"\n Longitud
: " + file.length() + " Bytes"));
}
else
file=null;
}
}
void opciones()
{
int i,opc,cuenta;
Cuentas A=new Cuentas();
ventana();
if(file!=null)
A.lecturaArchivo(file);
else
file=new File ("src/archivo/Cuenta.dat");
Object [] valores = {"1. Adicion","2. Borrar","3. Edicion","4. Consulta","5.Salir"};
do
{
String resp=(String) JOptionPane.showInputDialog(null,"Elija la Opcion", "Entrada
de datos",JOptionPane.QUESTION_MESSAGE, null, valores,valores[0]);
opc=Character.digit(resp.charAt(0),10);
switch(opc)
{
case 1:
A.adicion();
break;
case 2:
A.borrar();
break;
case 3:
A.edicion();
break;
case 4:
A.consulta();
break;
}
}
while(opc!=5);
A.guardarArchivo(file);
}
Quedando:

Limpiar el error y construir…..


CUARTO MOMENTO RENOMBRAR EL ARCHIVO DE DATOS CON UN NOMBRE Y
EXTENSION

Seleccione el archivo de datos Cuenta del proyecto y pulsar el botón derecho del ratón y
seleccione la opción Rename (Renombrar)

Se abre una ventana, en la caja de texto coloque Cuenta.dat

Pulsar el Boton Aceptar

Pulsar la tecla F6 o el botón


Cerrar la ventana de ejecución (Output)-Archivo(run):

Cerrar el proyecto:
Sobre el nombre del proyecto (Archivo)>>Botón derecho del Mouse>>Opción Close

También podría gustarte