import java.io.*;
public class Producto {
private String codigo;
private String descripcion;
private double precio;
private int stock;
public Producto() {
setCodigo(null);
setDescripcion(null);
setPrecio(0);
setStock(0);
}
public Producto(String codigo, String descripcion, double precio, int stock) {
this.setCodigo(codigo);
this.setDescripcion(descripcion);
this.setPrecio(precio);
this.setStock(stock);
}
public String getCodigo() {
return codigo;
}
public void setCodigo(String codigo) {
this.codigo = codigo;
}
public String getDescripcion() {
return descripcion;
}
public void setDescripcion(String descripcion) {
this.descripcion = descripcion;
}
public double getPrecio() {
return precio;
}
public void setPrecio(double precio) {
this.precio = precio;
}
public int getStock() {
return stock;
}
public void setStock(int stock) {
this.stock = stock;
}
public void escribir(RandomAccessFile archivo) throws IOException {
if (codigo.length() < 10) {
for (int i = codigo.length(); i < 10; i++) {
codigo = codigo + " ";
}
} else {
codigo = codigo.substring(0, 10);
}
if (descripcion.length() < 50) {
for (int i = descripcion.length(); i < 50; i++) {
descripcion = descripcion + " ";
}
} else {
descripcion = descripcion.substring(0, 50);
}
archivo.writeChars(codigo);
archivo.writeChars(descripcion);
archivo.writeDouble(precio);
archivo.writeInt(stock);
}
public void leer(RandomAccessFile archivo) throws IOException {
codigo = "";
for (int i = 0; i < 10; ++i) {
codigo += archivo.readChar();
}
descripcion = "";
for (int i = 0; i < 50; ++i) {
descripcion += archivo.readChar();
}
precio = archivo.readDouble();
stock = archivo.readInt();
}
public int tamañoRegistro() {
return 132;
}
public static void crearArchivoProductos() {
File f = new File("d:\\productos.dat");
if (!f.exists()) {
try {
RandomAccessFile fProductos = new RandomAccessFile("d:\\productos.dat", "rw");
fProductos.close();
} catch (Exception ex) {
}
}
}
public Producto buscarProducto(String codigo) throws IOException {
RandomAccessFile fProductos = new RandomAccessFile("d:\\productos.dat", "r");
// seek(# de Bytes a recorrer)
fProductos.seek(0);
boolean exito = false;
// fproductos.getFilePointer(): Devuelve el numero de bytes
// que ha recorrido el puntero del archivo
// En otras me devuelve la posicion actual del puntero
while (fProductos.getFilePointer() < fProductos.length()) {
this.leer(fProductos);
// trim() : Funcion de cadena que elimina los espacios en blanco
// compareToIgnoreCase(cadena) : no distingue mayusculas y minusculas
if (this.codigo.trim().compareToIgnoreCase(codigo.trim()) == 0) {
exito = true;
break;
}
}
fProductos.close();
if (exito) {
return this;
} else {
return null;
}
}
public int buscarProducto1(String codigo) throws IOException {
RandomAccessFile fProductos = new RandomAccessFile("d:\\productos.dat", "r");
int pos, x = -1;
fProductos.seek(0);
pos = (int) fProductos.getFilePointer();
while (fProductos.getFilePointer() < fProductos.length()) {
this.leer(fProductos);
if (this.codigo.trim().compareToIgnoreCase(codigo.trim()) == 0) {
x = pos;
break;
}
pos = (int) fProductos.getFilePointer();
}
fProductos.close();
return x;
}
public Producto devolverProducto(int pos) throws IOException {
RandomAccessFile fProductos = new RandomAccessFile("d:\\productos.dat", "rw");
fProductos.seek(pos);
this.leer(fProductos);
fProductos.close();
return this;
}
public void modificaRegistro(int pos, String codigo, String descripcion, double precio, int stock) throws IOException {
RandomAccessFile fProductos = new RandomAccessFile("d:\\productos.dat", "rw");
fProductos.seek(pos);
this.codigo = codigo;
this.descripcion = descripcion;
this.precio = precio;
this.stock = stock;
this.escribir(fProductos);
fProductos.close();
}
public void agregar() throws IOException {
RandomAccessFile fProductos = new RandomAccessFile("d:\\productos.dat", "rw");
// fproductos.seek : direccion el puntero del archivo en un determinado registro
// de acuerdo un numero de bytes
fProductos.seek(fProductos.length());
// fProductos.length : Me devuelve el tamaño en bytes del Archivo
this.escribir(fProductos);
fProductos.close();
}
public boolean eliminaRegistro(String codigo) throws IOException {
RandomAccessFile fProductos = new RandomAccessFile("d:\\productos.dat", "r");
RandomAccessFile auxiliar = new RandomAccessFile("d:\\auxiliar.dat", "rw");
fProductos.seek(0);
boolean exito = false;
while (fProductos.getFilePointer() < fProductos.length()) {
this.leer(fProductos);
if (this.codigo.trim().compareToIgnoreCase(codigo.trim()) != 0) {
this.escribir(auxiliar);
} else {
exito = true;
}
}
fProductos.close();
auxiliar.close();
File archivo = new File("d:\\productos.dat");
archivo.delete();
File archivoaux = new File("d:\\auxiliar.dat");
archivoaux.renameTo(archivo);
return exito;
}
public int numeroDeRegistros() throws IOException {
RandomAccessFile fProductos = new RandomAccessFile("d:\\productos.dat", "r");
int n = (int) fProductos.length() / this.tamañoRegistro();
fProductos.close();
return n;
}
public String toString() {
return codigo.trim() + " " + descripcion.trim() + " " + precio + " " + stock;
}
public void imprimir() throws IOException {
RandomAccessFile fProductos = new RandomAccessFile("d:\\productos.dat", "r");
// seek(# de Bytes a recorrer)
fProductos.seek(0);
while (fProductos.getFilePointer() < fProductos.length()) {
this.leer(fProductos);
System.out.println(this);
}
fProductos.close();
}
}
import java.io.*;
class ArchivoAleatorio {
public static void main(String args[]) throws IOException {
// se llama crearArchivoProductos porque es estatico
Producto.crearArchivoProductos();
new Producto("001", "alfa", 12.5, 10).agregar();
new Producto("002", "beta", 13.9, 10).agregar();
Producto prod = new Producto();
if (prod.buscarProducto("001") != null) {
System.out.println("El codigo existe");
} else {
System.out.println("El codigo no existe");
}
prod.imprimir();
}
}
0 comentarios:
Publicar un comentario