1. Lectura y escritura de objetos con serialización. Crea
una aplicación que almacene los datos básicos de un vehículo como la matricula
(String), marca (String), tamaño de depósito (double) y modelo (String).
Los datos anteriores se pedirán por teclado y se irán
añadiendo al fichero (no se sobrescriben los datos) cada vez que ejecutemos la
aplicación.
El fichero siempre será el mismo, en todos los casos. El
atributo tamaño de depósito no se incluirá en el fichero (aun así debe pedirse
por teclado).
La aplicación deberá también poder visualizar los datos del
fichero.
ARCHIVO VEHICULO.JAVA
import java.io.Serializable;
public class Vehiculo
implements Serializable{
// Propiedades
private String matricula;
private String marca;
private transient double deposito;
private String modelo;
// Constructor
public Vehiculo(){}
// Métodos
public void setMatricula(String matricula){
this.matricula = matricula;
}
public void setMarca(String marca){
this.marca = marca;
}
public void setDeposito(double deposito){
this.deposito = deposito;
}
public void setModelo(String modelo){
this.modelo = modelo;
}
public String toString(){
return "Matricula:
" + matricula + ". Marca: " + marca + ". Modelo: " +
modelo;
}
}
ARCHIVO ESCRIBIRSINCABECERA.JAVA
import java.io.*;
public class
EscribirSinCabecera extends ObjectOutputStream{
// Constructor
public EscribirSinCabecera(OutputStream out) throws IOException{
super(out);
}
public EscribirSinCabecera() throws IOException,
SecurityException{
super();
}
// Métodos
/*
* (non-Javadoc)
* @see
java.io.ObjectOutputStream#writeStreamHeader()
*
* Redefino el método de
escribir la cabecera para que no haga nada
*/
protected void writeStreamHeader() throws IOException{}
}
ARCHIVO MAIN.JAVA
import java.io.*;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// Propiedades
String marca;
String modelo;
String matricula;
double deposito;
Vehiculo v = new Vehiculo();
Scanner sc = new Scanner(System.in);
String nuevoVehiculo = "Datos del vehículo:";
String finVehiculo = "\n";
System.out.println("Escribe marca del coche");
v.setMarca(sc.nextLine());
System.out.println("Escribe modelo del coche");
v.setModelo(sc.nextLine());
System.out.println("Escribe matricula del
coche");
v.setMatricula(sc.nextLine());
System.out.println("Escribe capacidad del
deposito");
v.setDeposito(Double.parseDouble(sc.nextLine()));
boolean finFichero = false;
File ve = new File("vehiculos.dat");
try{
if (ve.exists()){
// Escritura de datos
/* EscribirSinCabecera = ObjectOutputStream
editado para que no escriba nada en la cabecera del fichero
* y poder
leer correctamente los datos
*/
EscribirSinCabecera salida = new
EscribirSinCabecera(new FileOutputStream("vehiculos.dat", true));
salida.writeObject(v);
salida.close();
}
else{
ObjectOutputStream salida = new
ObjectOutputStream(new FileOutputStream("vehiculos.dat", true));
salida.writeObject(v);
salida.close();
}
// Lectura de datos
ObjectInputStream entrada = new ObjectInputStream(new
FileInputStream("vehiculos.dat"));
// Mientras haya objetos dentro del fichero leído
do{
try{
Vehiculo vLeidos=
(Vehiculo)entrada.readObject();
System.out.println(nuevoVehiculo);
System.out.println(vLeidos);
System.out.println(finVehiculo);
}
catch(EOFException
e){
finFichero = true; // Controlo la salida
del bucle para dejar de leer
}
}while(!finFichero);
entrada.close();
}
catch(IOException e){
e.printStackTrace();
}
catch(ClassNotFoundException e){
e.printStackTrace();
}
}
}
2. Lectura y escritura de objetos. Externalización. Realizar
el mismo ejercicio anterior pero utilizando la interfaz EXTERNALIZABLE.
ARCHIVO VEHICULOS.JAVA
import java.io.*;
import java.util.*;
public class Vehiculos
implements Externalizable{
// Propiedades
private String matricula;
private String marca;
private double deposito;
private String modelo;
// Constructor
public Vehiculos(){}
// Métodos
public void setMatricula(String matricula){
this.matricula = matricula;
}
public void setMarca(String marca){
this.marca = marca;
}
public void setDeposito(double deposito){
this.deposito = deposito;
}
public void setModelo(String modelo){
this.modelo = modelo;
}
public void writeExternal(ObjectOutput out) throws IOException{
out.writeObject(matricula);
out.writeObject(marca);
out.writeObject(modelo);
}
public void readExternal(ObjectInput in) throws IOException,
ClassNotFoundException{
matricula = (String)in.readObject();
marca = (String)in.readObject();
modelo = (String)in.readObject();
}
public void muestraInfo(){
System.out.println("Marca: " + marca + ".
Modelo: " + modelo + ". Matricula: " + matricula);
}
}
ARCHIVO ESCRIBIRSINCABECERA.JAVA
import java.io.*;
public class
EscribirSinCabecera extends ObjectOutputStream{
// Constructor
public EscribirSinCabecera(OutputStream out) throws IOException{
super(out);
}
public EscribirSinCabecera() throws IOException,
SecurityException{
super();
}
// Métodos
/*
* (non-Javadoc)
* @see
java.io.ObjectOutputStream#writeStreamHeader()
*
* Redefino el método de
escribir la cabecera para que no haga nada
*/
protected void writeStreamHeader() throws IOException{}
}
ARCHIVO MAIN.JAVA
import java.io.*;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws IOException,
ClassNotFoundException{
// Propiedades
Vehiculos v = new Vehiculos();
Scanner sc = new Scanner(System.in);
boolean finFichero = false;
File ve = new File("vehiculos.dat");
// Código
System.out.println("Escribe marca del coche");
v.setMarca(sc.nextLine());
System.out.println("Escribe modelo del coche");
v.setModelo(sc.nextLine());
System.out.println("Escribe matricula del
coche");
v.setMatricula(sc.nextLine());
System.out.println("Escribe capacidad del
deposito");
v.setDeposito(Double.parseDouble(sc.nextLine()));
sc.close(); // Cierro el scanner
// Escribo en fichero
if (ve.exists()){
EscribirSinCabecera salida = new
EscribirSinCabecera(new FileOutputStream("vehiculos.dat", true));
v.writeExternal(salida);
salida.close();
}
else{
ObjectOutputStream salida = new
ObjectOutputStream(new FileOutputStream("vehiculos.dat", true));
v.writeExternal(salida);
salida.close();
}
// Leo en fichero
ObjectInputStream entrada = new ObjectInputStream(new
FileInputStream("vehiculos.dat"));
do{
try{
v.readExternal(entrada);
v.muestraInfo();
}
catch(EOFException e){
finFichero = true;
}
}while(!finFichero);
entrada.close();
}
}
0 comentarios:
Publicar un comentario