viernes, 11 de mayo de 2012

Resumen Java Tema Ficheros y Persistencia

A través de un flujo (Stream): I/O, leer/escribir, Read/Write, ya sea a un fichero, a una red o a memoria. java.io
Los Streams se abren, se utilizan y SIEMPRE se cierran con .close(). Pueden producir excepciones catch(IOException ioe)

File sirve para manejar archivos, obtener información o crearlos, pero no es un flujo. exist(), isFile(), isDirectory().


RandomAccessFile(fichero, r/rw) permite acceder a una posición concreta y empezar a leer/escribir una cantidad concreta de bytes: seek(), getFilePointer(), length(), mark(), reset(), writeDouble(), readDouble().



Con las hijas de Reader y Writer se pueden manejar Bytes (8bits) o caracteres (16bits).
    Con InputStream y OutputStream bytes para datos binarios (imágenes, sonidos, videos).
    InputStreamReader y OutputStreamReader para caracteres unicode (16bits) desde o hacia bytes.
  
  
    FileReader (leer) y FileWriter (escribir) para ficheros de caracteres.
      
        -BufferedReader lee caracteres y texto desde un flujo; readLine(), close()  
            BufferedReader br = new BufferedReader(    new FileReader("ejemplo.txt")    );
            while ((cad = br.readLine()) != null)     System.out.println(cad);


        -BufferedWriter escribe caracteres y texto a un flujo en paquetes reduciendo el número de accesos; writeLine(), flush(), close()
            BufferedWriter bw = new BufferedWriter(    new FileWriter("salida.txt")    );
            bw.write(cad1);
            bw.newLine();
            bw.write(cad2);
            bw.flush();

              
            -PrintWriter facilita la escritura de valores primitivos y datos con print() y println()
                PrintWriter salida = new PrintWriter(   new BufferedWriter(    new FileWriter("salida.txt")    )    );
                salida.println(cad1);
                salida.println(cad2);



    FileInputStream lee bytes desde un archivo
        -InputStreamReader traduce los bytes que lee del flujo a caracteres con cierta codificación (€,ñ,í,ó):
            BufferedReader br = new BufferedReader(   new InputStreamReader(   new FileInputStream("ejemplo.txt")   , "ISO-8859-1")   );





SERIALIZACION: Guardar o leer un objeto entero en disco.
La clase que se vaya a serializar tiene que implementar la interfaz "Serializable".

-ObjectOutputStream escribe los objetos en un fichero en datos binarios con writeObject(objeto):
    ObjectOutputStream oos = new ObjectOutputStream(    new FileOutputStream("fichero.dat")    );
    oos.writeObject(objetoaguardar);
    oos.close();


-ObjectInputStream siempre hay que hacer un cast al tipo de fichero correcto que recuperemos con readObject():
    ObjectInputStream ois = new ObjectInputStream(    new FileInputStream("fichero.dat")    );
    ClaseDestino recipiente = (ClaseDestino) ois.readObject();

No hay comentarios: