Está en la página 1de 36

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

También podría gustarte