Clase para manipular Flujos (Archivos) en Java

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: / /

Clase CProducto

Esta es la clase CProducto con la cual trabajaremos los objetos para la manipulación de registros sobre archivos.

import java.io.*;
/**
 * @author Daniel F
 */
public class CProducto implements Serializable {
    String Codigo;
    String Descripcion;
    float Precio;
    public CProducto(){}
    public CProducto(String C, String D, float P)
    {
        Codigo=C;
        Descripcion=D;
        Precio=P;
    }
    public void setCodigo(String Cod)
    {
        Codigo=Cod;
    }
    public void setDescripcion(String Des)
    {
        Descripcion=Des;
    }
    public void setPrecio(float Pre)
    {
        Precio=Pre;
    }
    public String getCodigo()
    {
        return Codigo;
    }
    public String getDescripcion()
    {
        return Descripcion;
    }
    public float getPrecio()
    {
        return Precio;
    }
    public int Tamaño()
    {
        return Codigo.length()*2+Descripcion.length()*2+4;
    }
}
Etiquetado: / /