Complementando la Clase ManejoObj (Archivos)

En el artículo anterior publiqué, a manera de ejemplo, la clase ManejoObj para ser utilizada en el manejo de archivos de acceso aleatorio con objetos.

En esa clase, existe un método llamado Eliminar(String Cod), el cual marca el registro como eliminado, sin procesar la eliminación física del archivo. Seguir leyendo «Complementando la Clase ManejoObj (Archivos)»

Etiquetado: / /

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