1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 |
/* Ejercicio: 2x3x01 Fecha: 04/10/2012 Enunciado: A partir de la clase punto... implementar los siguientes apartados. */ import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.ArrayList; public class _2x3x01 { /* a) Se pide escribir una clase EjercicioSerial2 donde se defina un método estático de nombre almacenarColPuntosEnArchivo que reciba una colección de objetos de la clase Punto. El método también recibirá por parámetro el nombre de un archivo para volcar sobre él la INFORMACION de los objetos Punto contenidos en la colección. El método no capturará ninguna excepción. */ public static void almacenarColPuntosEnArchivo(Punto[] pts, String file) throws IOException { ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File(file), false)); // Revisar: Al poner TRUE no funciona una vez creado el fichero. for( Punto p : pts ) { oos.writeObject(p.obtenerCoordX()); oos.writeObject(p.obtenerCoordY()); oos.writeObject(p.obtenerColor()); } oos.close(); } /* b) Añadir a la clase anterior un método estático, de nombre obtenerArrayListDeArchivo, que reciba por parámetro el nombre de un archivo con los datos correspondientes a varios objetos de la clase Punto. El método construirá y devolverá un objeto ArrayList<Punto> con los datos de los puntos leídos del archivo especificado. El método no capturará ninguna excepción. */ public static ArrayList<Punto> obtenerArrayListDeArchivo(String file) throws IOException, ClassNotFoundException { FileInputStream fis = new FileInputStream(new File(file)); ObjectInputStream ois = new ObjectInputStream(fis); ArrayList<Punto> arrayPunto = new ArrayList<>(); while( fis.available() > 0 ) arrayPunto.add(new Punto((Integer)ois.readObject(), (Integer)ois.readObject(), (String)ois.readObject())); ois.close(); fis.close(); return arrayPunto; } /* c) Añadir a la clase anterior un método main() para comprobar el funcionamiento de los métodos estáticos de los dos apartados anteriores. Se crearán varios objetos Punto que se almacenarán en un array. A partir del array se obtendrá una colección para guardar sus elementos en un archivo. Para finalizar se obtendrá un objeto ArrayList<Punto> con los objetos Punto creados a partir de los datos almacenados en el archivo. */ public static void main(String[] args) throws IOException, ClassNotFoundException { // PRIMERA PARTE: // Se crea una tabla con puntos: Punto[] puntos = { new Punto(5, 10, "red"), new Punto(25, 120, "green"), new Punto(45, -10, "white") }; // Se almacena la tabla: almacenarColPuntosEnArchivo(puntos, "puntos.dat"); // Se lee la informacion guardada y se mete en un ArrayList de Puntos ArrayList<Punto> arrayPunto = obtenerArrayListDeArchivo("puntos.dat"); // Se imprimen los datos de los puntos: for( Punto p : arrayPunto ) System.out.println(p.toString()); // SEGUNDA PARTE: // Se guarda la coleccion de puntos en un fichero2, despues se lee y se recupera en un array2: almacenarColPuntosComoObjetos(puntos, "puntos2.dat"); ArrayList<Punto> arrayPunto2 = obtenerArrayListDeArchivoComoObjeto("puntos2.dat"); // Se graba el array2 en fichero3, y despues se recupera: escribirArrayListEnArchivo(arrayPunto2, "puntos3.dat"); ArrayList<Punto> arrayPunt3 = leerArrayListDeArchivo("puntos3.dat"); // Se imprime el array3: System.out.println("\n" + arrayPunt3); } /* d) Escribir un método de nombre almacenarColPuntosComoObjetos que reciba por parámetro una colección de objetos Punto y el nombre del archivo donde se almacenarán. El método escribirá directamente cada objeto Punto al archivo. */ public static void almacenarColPuntosComoObjetos(Punto[] pts, String file) throws IOException { ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File(file), false)); // Revisar: Al poner TRUE no funciona una vez creado el fichero. for( Punto p : pts ) oos.writeObject(p); oos.close(); } /* e) Escribir un método de nombre obtenerArrayListDeArchivoComoObjeto que reciba por parámetro el nombre de un archivo donde se encuentran almacenados varios objetos de la clase Punto. El método leerá los objetos del archivo y los almacenará en un ArrayList que, finalmente será devuelto. */ public static ArrayList<Punto> obtenerArrayListDeArchivoComoObjeto(String file) throws IOException, ClassNotFoundException { FileInputStream fis = new FileInputStream(new File(file)); ObjectInputStream ois = new ObjectInputStream(fis); ArrayList<Punto> arrayPunto = new ArrayList<>(); while( fis.available() > 0 ) arrayPunto.add((Punto)ois.readObject()); ois.close(); fis.close(); return arrayPunto; } /* f) Escribir un método de nombre escribirArrayListEnArchivo, que reciba por parámetro un objeto ArrayList de objetos Punto y el nombre del archivo donde se almacenará. El método almacenará directamente el objeto ArrayList sobre el archivo recibido. No se capturará ninguna excepción. */ public static void escribirArrayListEnArchivo(ArrayList<Punto> arrayPunto, String file) throws IOException { ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File(file), false)); // Revisar: Al poner TRUE no funciona una vez creado el fichero. oos.writeObject(arrayPunto); oos.close(); } /* g) Escribir un método de nombre leerArrayListDeArchivo que reciba por parámetro el nombre de un archivo en el que se ha escrito previamente un objeto ArrayList que almacena objetos de la clase Punto. El método leerá el objeto ArrayList del archivo y lo devolverá. No se capturará ninguna excepción. */ public static ArrayList<Punto> leerArrayListDeArchivo(String file) throws IOException, ClassNotFoundException { ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File(file))); ArrayList<Punto> arrayPunto = (ArrayList<Punto>)ois.readObject(); // Revisar, marca conversion descontrolada ois.close(); return arrayPunto; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
/* Ejercicio: 2x3x01 Fecha: 04/10/2012 */ import java.io.Serializable; public class Punto implements Serializable { private int coordX; private int coordY; private double distOrigen; private String color; private static final long serialVersionUID = -4612458270904041959L; public Punto(int cx, int cy, String color) { coordX = cx; coordY = cy; distOrigen = Math.sqrt(cx * cx + cy * cy); this.color = color; } public int obtenerCoordX() { return coordX; } public int obtenerCoordY() { return coordY; } public double obtenerDistancia() { return distOrigen; } public String obtenerColor() { return color; } public String toString() { return "(" + coordX + ", " + coordY + ")" + "Dsit: " + distOrigen + " color: " + color; } } |