Académique Documents
Professionnel Documents
Culture Documents
Número: 38
Nombre: Agustín Lara
Saldo: 984.26
ArchivoClientes
RandomAccessFile archivo
ArchivoClientes()
void altaCliente(Cliente o)
long buscarCliente(int cuenta)
void ConsultaCliente(long pos)
void modificaCliente(long pos, Cliente o)
void borraCliente(long pos)
void cierra()
Cliente
int cuenta
String nombre
double Saldo
Cliente()
Metodos Set / get
Creación de un archivo de acceso aleatorio
• La clase ArchivoClientes permitirá abrir el archivo, agregar, borrar,
modificar y buscar clientes como operaciones básicas.
import java.io.*;
class ArchivoClientes {
RandomAccessFile archivo;
ArchivoClientes(String name) {
try {
archivo = new RandomAccessFile(name,"rw");
}
catch (IOException e){ System.out.println ("ErrorXX E/S");
}
}
void cerrar () {
try
{
archivo.close();
} catch (IOException e)
{ System.out.println ("ErrorXX E/S"); }
}
Otros métodos:
Operaciones a implementar por el alumno:
archivo.writeInt(o.getCuenta());
archivo.writeUTF(o.getNombre().substring(0,14));
archivo.writeDouble(o.getSaldo());
Archivo-Objeto
new Cliente(archivo.readInt(),archivo.readUTF(),
archivo.readDouble());
Atributo-campo
file
archivo.writeInt(o.getCuenta());
object
Campo-Atributo
file
Cliente.setCuenta(archivo.readInt());
... ... ...
object
Mapeo Tipo Quién y cómo?
Objeto-Archivo La hace el programador,
MANUAL
Archivo-Objeto respetando un orden.
MAPEO???
1. Hacer Serializable el objeto a persistir
import java.io.Serializable;
En la clase gestora:
void guardarCliente(Cliente c) {
try {
FileOutputStream fos = new FileOutputStream("t.tmp");
ObjectOutputStream out = new ObjectOutputStream (fos);
out.writeObject(c);
} catch (..)
{……}
}
3. Recuperar
En la clase gestora
Cliente recuperarCliente(Cliente c) {
try {
FileOutputStream fin = new FileOutputStream("t.tmp");
ObjectInputStream in = new ObjectInputStream (fin);
Cliente c = (Cliente) in.readObject();
return c;
} catch (..)
{……}
}
Trabajar con más de un cliente
void guardarClientes(Vector v) {
try {
FileOutputStream fos = new FileOutputStream("t.tmp");
ObjectOutputStream out = new ObjectOutputStream (fos);
for (int i=0;i<v.size();i++)
out.writeObject((Cliente)v.elementAt[i]);
} catch (..) {……}
}
Vector recuperarCliente() {
Vector v = new Vector();
try {
FileInputStream fin = new FileInputStream("t.tmp");
ObjectInputStream in = new ObjectInputStream (fin);
Cliente c = (Cliente) in.readObject();
while (c != null)
{ v.addElement(c);
c = (Cliente) in.readObject();
return v;
} catch (..) {……}
También
while (c != null && ----)
{ if (c.getDNI==XXX)
// hacer algo con c
else // avanzo
Pero….
java.util
Class Vector<E>
java.lang.Object
java.util.AbstractCollection<E>
java.util.AbstractList<E>
java.util.Vector<E>
All Implemented Interfaces:
Serializable, Cloneable, Iterable<E>, Collection<E>, List<E>,
RandomAccess
…. Entonces
void guardarClientes(Vector v) {
try {
FileOutputStream fos = new FileOutputStream("t.tmp");
ObjectOutputStream out = new ObjectOutputStream (fos);
out.writeObject(v);
} catch (..)
{……}
}
Vector recuperarCliente() {
try {
FileInputStream fin = new FileInputStream("t.tmp");
ObjectInputStream in = new ObjectInputStream (fin);
Vector v = (Vector) in.readObject();
return v;
} catch (..) {……}
Supongamos:
import java.io.Serializable;