Programación Orientada a Objetos:
Persistencia
Ing. Julio Ernesto Carreño Vargas MsC.
aportes: M. Consuelo Franky
Temario:
- files y streams
- Escribir y leer bytes
- Escribir y leer datos primitivos
- Escribir y leer texto
- Escribir y leer objetos
2
Programación Orientada a Objetos
files y streams
3
Programación Orientada a Objetos
Persistencia
Los objetos creados en memoria pueden ser
guardados en disco duro de modo que su
información pueda ser recuperada
posteriormente.
Programación Orientada a Objetos 4
File I/O
En Java para leer y/ó escribir a
archivos se debe crear un objeto stream
que manejará dicho archivo
Un stream es una secuencia de items
de datos, usualmente de 8bits (1 byte)
Programación Orientada a Objetos 5
Dos tipos de streams
Java tiene dos tipos de streams
Entrada: input stream
datos de entrada que vienen del disco
Salida: output stream
datos de salida que van hacia hacia el disco
Programación Orientada a Objetos 6
Combinación de Streams de salida
OutputStream Clase abstracta
write() de un byte
BufferedOutputStream FileOutputStream write() sobre un
write() por bloques archivo nativo
ObjectOutputStream
writeObject()
DataOutputStream PrintStream PrintWriter
write() de datos primitivos
print() y println() de líneas de texto
7
Programación Orientada a Objetos
Combinación de Streams de entrada
Clase abstracta
InputStream read() de un byte
BufferedInputStream FileIntputStream read() a partir de un
read() por bloques archivo nativo
FileReader
BufferedReader
DataInputStream Scanner StreamTokenizer
read() de datos next(), nextInt(), lectura por tokens con
primitivos nextDouble(), nextToken()
readline() de nextLine()
líneas texto para capturar siguiente cadena y
convertirla
ObjectInputStream
readObject() 8
Programación Orientada a Objetos
Streams básicos
Algunos streams que facilitan el acceso
a archivos son:
Salida:
FileOutputStream: escribe datos como
secuencia de bytes
Entrada:
FileInputStream: lee datos como secuencia
de bytes
Programación Orientada a Objetos 9
Ruta de un archivo
En Java: Primero se crea un archivo en disco
usando la clase File.
Programación Orientada a Objetos 10
Declarar los streams
PrintWriter dataOutStream = null;
PrintWriter
FileOutputStream
Programación Orientada a Objetos
data.txt
11
Escribir y leer
bytes
12
Programación Orientada a Objetos
Escribiendo bytes
usa FileOutputStream Archivo binario
resultante
.dat” );
Requiere bloque try-catch para captura de posible excepción
Programación Orientada a Objetos 13
(lo pide el compilador)
Leyendo bytes
usa FileInputStream
.dat” );
Programación Orientada a Objetos 14
Escribir y leer
datos primitivos
15
Programación Orientada a Objetos
Streams de alto nivel
Los streams que se usan para escribir y
leer datos primitivos desde/hacia
archivos:
Salida:
FileOutputStream junto a DataOutputStream
Entrada:
FileInputStream junto a DataInputStream
Programación Orientada a Objetos 16
Streams de alto nivel –Escribir-
DataOutputStream
FileOutputStream
Programación Orientada a Objetos 17
Streams de alto nivel –Escribir-
usa FileOutputStream junto a DataOutputStream
.dat” );
Programación Orientada a Objetos 18
Streams de alto nivel –Leer-
DataInputStream
FileInputStream
Programación Orientada a Objetos 19
Streams de alto nivel –Leer-
usa FileInputStream junto a DataInputStream
.dat” );
leyendo del
Programación Orientada a Objetos 20
Streams de alto nivel –Concordancia
Programación Orientada a Objetos 21
Escribir y leer
texto
Programación Orientada a Objetos 22
Entrada/Salida en archivos de texto
Los datos pueden ser transformados y
guardados como cadenas en archivos de texto:
esto permite ver los datos usando un editor de
texto
Para escribir (salida) en archivos de texto
usamos el objeto java PrintWriter
Para leer(entrada) de archivos de texto vamos a
usar: Scanner
Programación Orientada a Objetos 23
Streams de texto–Escribir:
usa PrintWriter sobre un FileOutputStream
println
PrintWriter
public static boolean escribirTexto() {
File outFile = new File("D:/temporal/datos.txt"); write bytes
FileOutputStream outStream = null; FileOutputStream
PrintWriter dataOutStream = null;
boolean resultado = false;
try {
outStream = new FileOutputStream(outFile); datos.txt
dataOutStream = new PrintWriter(outStream);
dataOutStream.println("Juan Valdez");
dataOutStream.println(15000d);
resultado = true;
}
catch (Exception e) {
System.out.println("excepcion inesperada:" + e.getMessage());
}
finally {
try {
dataOutStream.close();
outStream.close();
}
catch (Exception e) {
System.out.println("excepcion cerrando el archivo:" + e.getMessage());
}
}
return resultado;
}
Programación Orientada a Objetos 24
Streams de texto–Leer:
usa Scanner
nextLine
public static boolean leerTexto() { Scanner
File inFile = new File("D:/temporal/datos.txt");
Scanner input= null;
boolean resultado = false;
try { datos.txt
input = new Scanner(inFile);
String nombre = input.nextLine();
String salarioStr = input.nextLine();
double salario = Double.parseDouble(salarioStr);
System.out.println("datos leidos" + nombre + " " + salario);
resultado = true;
}
catch (Exception e) {
System.out.println("excepcion inesperada:" + e.getMessage());
}
finally {
input.close();
}
return resultado;
}
Programación Orientada a Objetos 25
Archivos estándares
Archivos estándares (File) :
System.in – asociado al teclado
System.out - asociado a la consola
System.err - asociado a la consola
Programación Orientada a Objetos 26
Redirigir errores a un archivo diferente de la consola:
java MyClass 2>error.log
Redirigir tanto out como err en el comando de ejecución:
java MyClass > output.log 2>error.log
Redirigir out desde el programa:
OutputStream output = new
FileOutputStream("c:/data/system.out.txt");
PrintStream printOut = new PrintStream(output);
System.setOut(printOut);
Programación Orientada a Objetos 27
Escribir y leer
objetos
28
Programación Orientada a Objetos
Guardando Objetos
Es posible guardar objetos igual que se guardan
primitivas
Se usan los objetos:
ObjectOutputStream : guarda objetos en un
archivo
ObjectInputStream: carga objetos desde un
archivo
Programación Orientada a Objetos 29
Guardando Objetos
Para que los objetos de una clase puedan ser guardados en
un archivo, la clase debe “implementar” la interfaz
Serializable
Si un atributo no
se quiere guardar
debe tener el
modificador
transient (será
calculado a partir
de los otros
atributos)
Tampoco se
guardan los
Programación Orientada a Objetos atributos de clase 30
Guardando Objetos
usa FileOutputStream junto a ObjectOutputStream
Programación Orientada a Objetos 31
Leyendo Objetos
usa FileInputStream junto a ObjectInputStream
Programación Orientada a Objetos 32
Guardando Objetos
File outFile
= new File("objects.dat");
FileOutputStream outFileStream
= new FileOutputStream(outFile);
ObjectOutputStream outObjectStream
= new ObjectOutputStream(outFileStream);
Person person = new Person("Mr. Espresso", 20, 'M');
outObjectStream.writeObject( person );
account1 = new Account();
bank1 = new Bank();
En un archivo se pueden
outObjectStream.writeObject( account1 ); guardar objetos de clases
outObjectStream.writeObject( bank1 ); diferentes
Programación Orientada a Objetos 33
Leyendo Objetos
File inFile
= new File("objects.dat");
FileInputStream inFileStream
= new FileInputStream(inFile);
ObjectInputStream inObjectStream
= new ObjectInputStream(inFileStream);
Person person
Se debe hacer cast
= (Person) inObjectStream.readObject( );
Account account1
= (Account) inObjectStream.readObject( );
Deben leerse en el
Bank bank1 orden correcto
= (Bank) inObjectStream.readObject( );
Programación Orientada a Objetos 34
Bibliografía
C. Thomas Wu. An Introduction to Object Oriented
Programming with Java
[1] Eckel, Bruce. Piensa en JAVA, cuarta edición, Prentice Hall,
2007 , Capítulo 9
[2] H.M. Deitel / P.J. Deitel, “Java How to Program”, Quinta
Edición. Prentice Hall, 2003 , Capítulo 17
Programación Orientada a Objetos 35
Ejercicio
Escriba una clase Estudiante (atributos: nombre, carrera,
promedio)
Escriba una clase Test con main que lea un archivo con datos de
estudiantes y muestre el promedio global
El archivo tiene el siguiente formato:
#ESTUDIANTES
#nombre-----------carrera (IS, IE, IC)---------promedio
Carlos Alba *IS *4.5
Ana Lopez *II *4.2
Luis Torres *IS *4.0
Mauricio Roa *IC *3.9
#FIN
Programación Orientada a Objetos 36