8. Entrada/Salida – Paquete java.io
El paquete java.io proporciona un marco de trabajo para realizar
operaciones de entrada y salida entre nuestro programa java y
cualquier dispositivo externo al sistema (teclado, consola, ficheros,
maquinas remotas,...)
Se puede tener cierta independencia entre el programa Java y el
dispositivo gracias a la utilización de streams.
Un stream es un elemento software que permite el intercambio de un
flujo de bits entre dos entes en un solo sentido.
Para una operación de lectura y escritura contra un fichero, por
ejemplo, necesitaríamos dos streams, uno de entrada y otro de salida.
Las clases InputStream y OutputStream implementan en Java esta
funcionalidad.
David Contreras Bárcena
157
David Contreras Bárcena - ETSI
Lenguaje de Programación JAVA – 2º IINF y 2º ITIG
Lenguaje JAVA
8. Entrada/Salida – Paquete java.io
La API de Java diferencia entre los streams de caracteres y streams
de bytes.
Streams de bytes (InputStream y OutputStream)
Diseñados para operar a nivel de byte.
Hay ciertos dispositivos que sólo pueden trabajar a este nivel.
Streams de caracteres (Reader y Writer):
Diseñados para optimizar las operaciones con cadenas de caracteres.
Posteriores a las anteriores.
Soportan codificaciones Unicode-16.
Cualquier fichero de texto puede ser accedido directamente a través de este tipo
de stream.
Existen dispositivos, que aunque están preparados para enviar/recibir
información de esta naturaleza, no pueden tratatrse directamente con este
stream. En estos casos, se deberá envolver el stream de bytes con un stream de
caracteres: (ver diap. sig.)
InputStreamReader
OutputStreamReader
David Contreras Bárcena
158
8. Entrada – Modo de Operación
INPUTSTREAM
Byte
Tipos de
datos
readUTF()
readInt()
Objetos
readObject()
READER
Líneas de
caracteres
readLine()
read(byte)
ObjectInputStream
BufferedReader
DataInputStream
InputStreamReader
FileInputStream
InputStream
FileReader
File / String
Fichero
Otros disp. I/O
Fichero
David Contreras Bárcena
159
David Contreras Bárcena - ETSI
Lenguaje de Programación JAVA – 2º IINF y 2º ITIG
Lenguaje JAVA
8. Salida – Modo de Operación
OUTPUTSTREAM
Byte
datos
Tipos de
writeUTF(String)
writeInt(int)
Objetos
writeObject(Object)
write(byte[])
ObjectOutputStream
DataOutputStream
WRITER
Líneas de
caracteres
println(String)
PrintWriter
BufferedWriter
OutputStreamWriter
FileOutputStream
OutputStream
FileWriter
File / String
Fichero
Otros disp. I/O
Fichero
David Contreras Bárcena
160
8. Entrada/Salida – Excepciones
Object
Throwable
Exception
IOException
EOFException
FileNotFoundException
InterruptedIOException
UTFDataFormatException
OptionalDataException
David Contreras Bárcena
161
David Contreras Bárcena - ETSI
Lenguaje de Programación JAVA – 2º IINF y 2º ITIG
Lenguaje JAVA
8. Clase File
Implementa un fichero del sistema de archivos.
Se emplea para obtener información del fichero sobre el cual vamos a
trabajar.
Métodos:
System.out.println("De lectura :"+canRead);
System.out.println("De Escritura :"+canWrite);
System.out.println("Es un directorio :"+isDir);
System.out.println("Es un fichero :"+isFile);
}
}
}
David Contreras Bárcena
163
David Contreras Bárcena - ETSI
Lenguaje de Programación JAVA – 2º IINF y 2º ITIG
Lenguaje JAVA
8. Clase FileOutputStream
Permite abrir un fichero de texto para ser tratado en modo escritura.
Sobre este objeto se pueden realizar operaciones byte a byte
directamente.
Métodos:
write()
Ejemplo:
byte b = b[1024];
fos= new FileOutputStream (fichero);
bos = new BufferedOutputStream(fos);
…
for(i=0;b[i] != 0; i++)
bos.write(b[i]);
…
fis.close();
David Contreras Bárcena
164
8. Clase FileInputStream
Permite abrir un fichero de texto para ser tratado en modo lectura
secuencialmente byte a byte.
Métodos:
read()
Ejemplo:
byte b = b[1024];
fis= new FileInputStream(fichero);
…
int i = fis.read(b);
String s = new String(b);
…
fis.close();
David Contreras Bárcena
165
David Contreras Bárcena - ETSI
Lenguaje de Programación JAVA – 2º IINF y 2º ITIG
Lenguaje JAVA
8. Clase DataOutputStream
La escritura se realiza considerando la información como tipos de
datos.
Métodos:
Ejemplo:
DataOutputStream dos = new DataOutputStream( new
dos.writeDouble(dni)
dos.writeChar('\t');
dos.writeInt(edad);
dos.writeChar('\t');
dos.writeUTF(nombre);
dos.writeChar('\n');
David Contreras Bárcena
166
8. Clase DataInputStream
La lectura se realiza considerando la información como tipos de datos
Métodos:
Ejemplo:
DataInputStream dis = new DataInputStream(
new FileInputStream(“personas.dat”));
dni = dis.readDouble();
dis.readChar(); // elimina el tabulador
edad = dis.readInt();
dis.readChar(); // elimina el tabulador
nombre = dis.readUTF();
David Contreras Bárcena
167
David Contreras Bárcena - ETSI
Lenguaje de Programación JAVA – 2º IINF y 2º ITIG
Lenguaje JAVA
8. Clase ObjectOutputStream()
Se exporta el estado de un objeto a una cadena de bytes.
Los objetos deben ser serializables.
Métodos:
writeObject();
Ejemplo:
FileOutputStream fos = new
FileOutputStream(“Fechas.txt");
ObjectOutputStream s = new ObjectOutputStream(fos);
s.writeObject(“Hoy");
s.writeObject(new Date());
s.flush();
s.close();
David Contreras Bárcena
168
8. Clase ObjectInputStream()
Se importa el estado de un objeto de una cadena de bytes.
Los objetos deben ser serializables.
Métodos:
readObject();
Ejemplo:
FileInputStream fis = new FileInputStream(“Fechas.txt");
ObjectInputStream s = new ObjectInputStream(fis);
String hoy = (String)s.readObject();
Date fecha = (Date)s.readObject();
s.close();
David Contreras Bárcena
169
David Contreras Bárcena - ETSI
Lenguaje de Programación JAVA – 2º IINF y 2º ITIG
Lenguaje JAVA
8. Clase PrintWriter
Escritura optimizada de un fichero de texto a nivel de líneas.
import java.io.*;
class EscribeLinea
{
try
{
public static void main(String args[])
{
PrintWriter pw = new PrintWriter(new
BufferedWriter(new FileWriter(args[0])), true);
pw.println("Primera linea del fichero");
pw.println("Segunda linea del fichero");
pw.println("Tercera linea del fichero");
pw.close();
}
catch(IOException e)
{
}
}
}
System.out.println(“Se produjo un error de E/S");
David Contreras Bárcena
170
8. Clase BufferedReader (con FileReader)
Las lecturas se realizan a nivel de líneas de caracteres.
Se apoya en la clase FileReader.
El método más importante que posee es readLine().
8. Clase BufferedReader (con FileInputStream)
Existen casos en los tendremos que leer líneas de caracteres sobre
dispositivos que trabajan con streams (p.e. el Teclado).
Entones utilizaremos las clases InputStreamReader o
OutputStreamWriter.
Comentarios de: Curso De Java - Tema 8. Entrada/Salida (0)
No hay comentarios