Programación Orientada a Objetos Persistencia en JAVA Angela C. Carrillo Ramos Persistencia Manejo de Streams Un Stream representa un flujo de datos, o un canal de comunicación con un escritor o un lector lector.. Tipos:: Tipos InputStream/OutputStream: L/E de Bytes InputStream/OutputStream: Reader/Writer Reader/Writer:: L/E de Caracteres InputStreamReader/OutputStreamWriter InputStreamReader/OutputStreamWriter:: convierte bytes en caracteres y viceversa 1 Persistencia Tipos DataInputStream/DataOutputStream: L/E DataInputStream/DataOutputStream: de datos de tipo simple y Cadenas (Strings) ObjectInputStream/ObjectOutputStream ObjectInputStream/ObjectOutputStream:: para persistencia de objetos en Java BufferedInputStream/ BufferedOutputStream/ BufferedReader/ BufferedWriter:: Adiciona eficiencia BufferedWriter Persistencia write() OutputStream read() InputStream 2 Persistencia Consejos para utilizar Streams InputStream y OutputStream son clases abstractas.. abstractas El número de bytes disponibles para leer en un InputStream se halla con el método available() close() close():: Para cerrar el Stream Persistencia Ejemplo try{ InputStreamReader converter= InputStreamReader (System.in); BufferedReader in = new BufferedReader(converter); String text = in.readLine(); int i = NumberFormat.getInstance().parse(text).intValue(); } catch(IOException e){ } catch(ParseException pe){ } 3 Persistencia Si necesita leer o escribir cadenas de caracteres, use una variedad de Reader o Writer.. De lo contrario, use byte Streams Writer Se puede usar DataInputStream con alguna clase de input Stream, para leer desde un archivo, un socket o la entrada estándar, si se niecesita leer String o tipos de datos básicos. básicos. Persistencia writeFloat() writeInt() writeLong() write() read() readFloat() readInt() readLong() DataOutputStream OutputStream DataInputStream InputStream 4 Persistencia Files La clase java. java.io io..File encapsula el acceso a la información de un archivo o un directorio en el sistema de archivos Constructores File unarchivo = new File(“archivo.txt”) File unarchivo2 = new File(“directorio”,“archivo.txt”) Persistencia Métodos de File Método Retorna canRead() boolean canWrite() boolean delete() boolean exists() boolean getAbsolutePath() String getName String Sirve para archivo de lectura? archivo de escritura? borra el archivo Existe el archivo? Retorna el path Retorna el nombre 5 Persistencia Métodos de File Método Retorna Sirve para getParent() getPath() isDirectory() isFile() lastModified() String String boolean boolean long Nombre del directorio. directorio. Retorna el path Es directorio? Es archivo? Tiempo de la última modificación Persistencia Métodos de File Método Retorna length() long list() String[ ] mkdir() boolean mkdirs() boolean renameTo(File dest)boolean Sirve para Tamaño Archivos de un dir. Crea el directorio Crea todos los dir. Renombre el archivo 6 Persistencia File Streams File archivo = new File(“etc/password”); FileInputStream sarchivo = new FileInputStream(archivo); FileInputStream sarchivo = new FileInputStream (“etc/password”); En caso de error pueden lanzarse dos excepciones FileNotFoundException o IOException IOException.. Si no hay error, sus métodos available() y length() tienen el mismo valor Usar close() al terminar de usarlo. usarlo. Persistencia Ejemplo: El contenido de un archivo lo imprime por la salida estándar (std.out) import java.io.*; class ListIt{ public static void main (String args[]) throws Exception{ File file = new File (args[1]); if (!file.exists() || !file.canRead()){ System.out.println(“Imposible leer ” + file); return; } 7 Persistencia if (file.isDirectory()){ String [] files = file.list(); for (int i=0; i<files.length; i++) System.out.println(files[i]); } Persistencia else try{ FileReader fr = new FileReader(file); BufferedReader in=new BufferedReader(fr); String line; while ((line = in.readLine()) != null) System.out.println(line); } catch(FileNotFoundException e){ System.out.println(“Archivo desaparecido”); } }// cierra el metodo main } // cierra la clase 8 Persistencia FileOutputStream es una subclase OutputStream. Ejemplo: String s=new BufferedReader(new InputStreamReader(System.in)).readLine(); File out = new File(“archivo.txt”); FileWriter fw = new FileWriter(out): PrintWriter pw=new PrintWriter(fw); pw.println(s); Persistencia Serialización Forma automática para salvar y cargar el estado de un objeto Se implementa la interface Serializable y se salva a través de un Stream Los miembros de clase y los no serializados, estos últimos etiquetados transient, NO se almacena su valor Subclases de Stream, ObjectInputStream y ObjectOutputStream usan la interfaz Serializable 9 Persistencia Ejemplo de enviar a disco un objeto import java.io.*; import java.util.*; public class Save { public static void main(String[] args){ Vector v = new Vector(); v.addElement( ”Gabriel García Márquez” ); v.addElement( new Integer(26) ); v.addElement( new Double(Math.PI) ); Persistencia try{ FileOutputStream fileOut = new FileOutputStream(“repositorio.dato”); ObjectOutputStream out = new ObjectOutputStream(fileOut); out.writeObject( v ); } catch(Exception e){ System.err.println( e.getMessage() ); } } } 10 Persistencia Ejemplo de traer de disco un objeto import java.io.*; import java.util.*; public class Load { public static void main(String[] args){ try{ FileInputStream fileIn = new FileInputStream(“repositorio.dato”); ObjectInputStream in=new ObjectInputStream(fileIn); Vector v = (Vector) in.readObject(); ... } Persistencia catch(Exception e){ System.out.println( e.getMessage() ); } } } 11 Persistencia import java.io.*; Serializable{ class Producto implements Serializable{ ...... } class Tienda implements Serializable{ Serializable{ ...... } Persistencia class TiendaConsola implements Serializable{ Serializable{ ........//clase que contiene el main Tienda t; … public static void GuardarTienda (Tienda tienda, String arch){ FileOutputStream fileOut = new FileOutputStream(“tiendita.dat”); ObjectOutputStream out = new ObjectOutputStream(fileOut); out.writeObject( t ); } 12 Persistencia public static Tienda CargarTienda(String arch) { try{ FileInputStream fileIn = new FileInputStream(“tiendita.dat”); ObjectInputStream in=new ObjectInputStream(fileIn); Tienda t = (Tienda) in.readObject(); ... } catch (Exception e){ … } } ........ } 13