Download Programación Orientada a Objetos

Document related concepts
no text concepts found
Transcript
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