La Clase ManejoObj, nos permitirá manejar los flujos y las acciones sobre los registros (con objetos) y archivos. Usa instancias de la Clase CProducto como estructuras de registros.
import java.io.*;
import javax.swing.*;
public class ManejoObj {
private RandomAccessFile FES; //flujo
private int nregs; //numero de registros
private int TamañoReg=140; //tamaño del registro en bytes
private File ArchivoActual;
public ManejoObj(File Archivo) throws IOException
{
if(Archivo.exists() && !Archivo.isFile())
throw new IOException(Archivo.getName() + "no es un Archivo Válido");
ArchivoActual=Archivo;
FES=new RandomAccessFile(Archivo,"rw");
nregs=(int)Math.ceil((double) FES.length()/(double)TamañoReg);
}
public void Cerrar() throws IOException {FES.close();}
public int NRegristros(){this.Mensaje(String.valueOf(nregs) + " registros"); return nregs; }
public boolean PonerValorEn(int i,CProducto Obj) throws IOException
{
if(i >= 0 && i <= nregs)
{
if(Obj.Tamaño() + 4 > TamañoReg)
this.Mensaje("Tamaño de registro Excedido");
else
{
FES.seek(i* TamañoReg);
FES.writeUTF(Obj.getCodigo());
FES.writeUTF(Obj.getDescripcion());
FES.writeFloat(Obj.getPrecio());
return true;
}
}
else
this.Mensaje("Número de registro fuera de limites");
return false;
}
public CProducto ValorEn(int i) throws IOException
{
if(i >= 0 && i < nregs)
{
FES.seek(i*TamañoReg);
String Cod=FES.readUTF();
String Des=FES.readUTF();
float Pre=FES.readFloat();
return new CProducto(Cod,Des,Pre);
}
else
{
this.Mensaje("Número de registro fuera de limites");
return null;
}
}
public void Añadir(CProducto Obj) throws IOException
{
if(PonerValorEn(nregs,Obj)) nregs++;
}
public boolean Eliminar(String Cod) throws IOException
{
CProducto Obj;
for(int reg_i = 0; reg_i < nregs; reg_i++)
{
Obj=this.ValorEn(reg_i);
if(Obj.getCodigo().compareToIgnoreCase(Cod)==0)
{
Obj.setCodigo("");
this.PonerValorEn(reg_i, Obj);
return true;
}
}
return false;
}
public int Buscar(String Str, int Pos) throws IOException
{
CProducto Obj;
String Cod;
if(Str == null) return -1;
if(Pos < 0) Pos = 0;
for(int reg_i = Pos; reg_i < nregs; reg_i++)
{
Obj = this.ValorEn(reg_i);
Cod = Obj.getCodigo();
if(Cod.indexOf(Str) > -1)
return reg_i;
}
return -1;
}
public void Mensaje(String msj)
{
JOptionPane.showMessageDialog(null, msj, "Mensaje al Usuario", JOptionPane.INFORMATION_MESSAGE);
}
}
Etiquetado: archivos / flujos / java