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); } }
Un comentario en «Clase para manipular Flujos (Archivos) en Java»