Sie sind auf Seite 1von 16

Entrada/Salida en Java

Jaime Ramrez, ngel Lucas Gonzlez DLSIIS. Facultad de Informtica Universidad Politcnica de Madrid.
1

Streams
Un stream representa un flujo de informacin:
procedente de una fuente (teclado, file, memoria, red, etc.) o dirigida a un destino (pantalla, file, etc.) Los streams comparten una misma interfaz que hace abstraccin de los detalles especficos de cada dispositivo de E/S. Todas las clases de streams estn en el paquete java.io
2

Clases de Streams (Streams orientados a byte)


Los mdulos sombreados representan fuentes de datos. Los mdulos sin sombrear representan procesadores. Los procesadores se pueden aplicar a otro procesador o a una fuente.

Subclases de InputStream
FileInputStream: lectura de files byte a byte ObjectInputStream: lectura de files con objetos. FilterInputStream:
BufferedInputStream: lectura con buffer, ms eficiente. DataInputStream: lectura de tipos de datos primitivos (int, double, etc.).
4

Subclases de OutputStream
FileOutputStream: escritura de files byte a byte ObjectOutputStream: escritura de files con objetos. FilterOutputStream:
BufferedOutputStream: escritura con buffer, ms eficiente. DataOutputStream: escritura de tipos de datos primitivos (int, double, etc.).
5

Clases de Streams (Streams orientados a caracter)


Soportan UNICODE (16 bits para un char). Mdulos sombreados son fuentes, y sin sombrear son procesadores.

Subclases de Reader
InputStreamReader: convierte un stream de bytes en un stream de chars.
FileReader: se asocia a files de chars para leerlos.

BufferedReader: proporciona entrada de caracteres a travs de un buffer (ms eficiencia).

Subclases de Writer
OutputStreamWriter: convierte un stream de bytes en un stream de chars.
FileWriter: se asocia a files de chars para modificarlos.

BufferedWriter: proporciona salida de caracteres a travs de un buffer (ms eficiencia). PrintWriter: mtodos print() y println() para distintos tipos de datos.
8

Otras Clases de java.io


File: permite realizar operaciones habituales con files y directorios. RandomAccessFile: permite acceder al nsimo registro de un file sin pasar por los anteriores. StreamTokenizer: permite trocear un stream en tokens.

Tpicos Usos de los Streams (lectura por lneas)


public static void main(String[] args) throws IOException { // 1a. Se lee un file lnea a lnea BufferedReader in = new BufferedReader( new FileReader("IOStreamDemo.java")); String s, s2 = new String(); while((s = in.readLine())!= null) s2 += s + "\n"; in.close(); // 1b. Se lee una lnea por teclado BufferedReader stdin = new BufferedReader( new InputStreamReader(System.in)); System.out.print("Enter a line:"); System.out.println(stdin.readLine()); }

10

Parsing de tipos bsicos


String linea; int a; BufferedReader stdin = new BufferedReader( new InputStreamReader(System.in)); System.out.print("Enter a line:"); linea = stdin.readLine(); a = Integer.parseInt(linea); System.out.println(a); Tambin estn disponibles: parseDouble(), parseLong()
11

Tpicos Usos de los Streams (escritura por lneas)


// throws IOException String []s = {hola, que, tal}; // Se inicializa s PrintWriter out1 = new PrintWriter( new BufferedWriter( new FileWriter("IODemo.out"))); int lineCount = 1; for (int i=0; i<s.length(); i++) out1.println(lineCount++ + ": " + s[i]); out1.close();
12

Tpicos Usos de los Streams (escritura de tipos bsicos)


DataOutputStream out2 = new DataOutputStream(new BufferedOutputStream(new FileOutputStream("Data.txt")));
out2.writeDouble(3.14159); out2.writeBytes("That was pi\n); out2.writeChars( "That was pi\n); out2.writeDouble(1.41413); out2.writeUTF("Square root of 2"); out2.close();
13

// throws IOException

Tpicos Usos de los Streams (lectura de tipos bsicos)


// throws IOException DataInputStream in5 = new DataInputStream( new BufferedInputStream( new FileInputStream("Data.txt")));

System.out.println(in5.readDouble()); System.out.println(in5.readLine()); // deprecated System.out.println(in5.readDouble()); System.out.println(in5.readUTF());

14

Tpicos Usos de los Streams (files de acceso aleatorio)


// throws IOException // acceso de lectura/escritura RandomAccessFile rf = new RandomAccessFile("rtest.dat", "rw"); for(int i = 0; i < 10; i++) rf.writeDouble(i*1.00); rf.close(); rf = new RandomAccessFile("rtest.dat", "rw"); rf.seek(5*8); // salta 5 doubles (8 bytes cada uno) rf.writeDouble(47.00); // modifica el sexto double rf.close(); // acceso de slo lectura rf = new RandomAccessFile("rtest.dat", "r"); for(int i = 0; i < 10; i++) System.out.println( "Value " + i + ": " + rf.readDouble()); rf.close();
15

Tpicos Usos de los Streams (Object Stream)


Java permite guardar objetos en ficheros, pero esos objetos deben implementar la interfaz Serializable:
public class MySerializableClass implements Serializable { ... }

Ejemplo:
// throws IOException FileOutputStream out = new FileOutputStream("theTime.dat"); ObjectOutputStream s = new ObjectOutputStream(out); s.writeObject("Today"); s.writeObject(new Date(1,1,2006)); s.close(); // throws IOException y ClassNotFoundException FileInputStream in = new FileInputStream("theTime.dat"); ObjectInputStream s = new ObjectInputStream(in); String today = (String)s.readObject(); Date date = (Date)s.readObject(); s.close();
16

Das könnte Ihnen auch gefallen