Stream
Cualquier programa realizado en Java que necesite llevar a
cabo una operacin de I/O lo har a travs de un stream. Un
stream, cuya traduccin literal es "flujo", es una abstraccin
de todo aquello que produzca o consuma informacin.
Podemos ver a este stream como una entidad lgica. La
vinculacin de este stream al dispositivo fsico la hace el
sistema de entrada y salida de Java. Se ve pues la eficacia de
esta implementacin pues las clases y mtodos de I/O que
necesitamos emplear son las mismas independientemente del
dispositivo con el que estemos actuando, luego, el ncleo de
Java, sabr si tiene que tratar con el teclado, el monitor, un
sistema de ficheros o un socket de red liberando a nuestro
cdigo de tener que saber con quin est interactuando.
Lectura de consola.
La entrada de consola, como sabemos, la obtenemos leyendo
de System.in. Para conseguir un flujo de caracteres
envolvemos
dicha
clase
en
un
objeto
del
tipo
BufferedReader, el cual soporta un flujo de entrada
buferizado.
Atendiendo a las especificaciones de esta clase, el parmetro
que se le pasa es el stream de entrada que es de tipo
Reader, el cual, como sabemos es abastracto por lo que
recurriremos a una de sus subclases, en nuestro caso ser
InputStreamReader que convierte bytes a caracteres. Otra
vez ms, atendiendo a la especificacin de esta ltima clase
Imprimir a consola.
class FileDemo {
static void imprimir(String s) {
System.out.println(s);
}
public static void main(String args[]) {
File fich = new File("pon la ruta del fichero que quieras");
imprimir("Nombre del fichero : " + fich.getName());
imprimir("Path relativo : " + fich.getPath());
imprimir("Path Absoluto : " + fich.getAbsolutePath());
imprimir("Directorio padre : " + fich.getParent());
imprimir(fich.exists() ? "existe" : "no existe");
imprimir("Ultima modificacin del fichero : " +
fich.lastModified());
imprimir(fich.canWrite() ? "es de escritura" : "no es de
escritura");
imprimir(fich.canRead() ? "es de lectura" : "no es de lectura");
imprimir(fich.isFile() ? "fichero normal" : "no normal");
imprimir("Tamao del fichero : " + fich.length() + "Bytes");
try {
imprimir("URL del fichero : " +fich.toURL());
} catch (MalformedURLException urle)
{imprimir(urle.getMessage());}
fich.setReadOnly();//tambin podemos modificar sus atributos.
}
}//Fin clase FileDemo
BufferedInputStream.
escribir datos
Leemos e escribimos
entrada/salida:
datos
del
flujo
estndar
de
System.out.println(Hello);
System.in.read();
Hasta ahora, para leer datos, utilizamos el paquete
TextIO:
TextIO.getlnChar();
Flujos estndares
Los flujos estndar de entrada y salida siempre estn
abiertos mientras se ejecuta el programa, listos para
proporcionar datos (entrada) o para acceptar datos (salida).
Por defecto, el flujo estndar de entrada es el teclado.
Referimos al flujo estndar de entrada con System.in
Por defecto, el flujo estndar de salida es la pantalla.
Referimos al flujo estndar de salida con System.out
int System.in.read()
Lee un cdigo ascii entre 0 y 255 (un byte) y lo pone en un
int. System.out.print(Introduzca caracter: ); char c =
(char)System.in.read();
System.out.println(\nIntroduciste
ReadCharacter.java
un:
c);
abierto
desde
el
fichero
flujo
abierto
al
fichero
<
inputReadCharacters.txt
Lee
de
inputReadCharacters.txt
outputReadCharacters.txt
escribe
>
a
Flujo (stream)
Un flujo, o stream, es una conexin entre un programa y una
fuente o destino de datos.
Un flujo de entrada maneja los datos que fluyen al programa
Un flujo de salida maneja los datos que fluyen del programa
En la figura, es un trozo de informacin
Ejemplo de aparatos de IO: conexin a internet, teclado,
ratn, pantalla, impresora, disco duro (es I y O, depende de la
aplicacin).
System.in
y
System.out
son
streams
creados
automaticamente cuando se ejecuta un programa Java.
Flujos (Streams)
import java.io.*;
1. Abrir el stream
2. Usar el stream (leer, escribir)
3. Cerrar el stream
Se necesitan 3 flujos:
System.in de tipo InputStream lee Bytes desde el flujo de
entrada estndar.
InputStreamReader lee Bytes y les descodifica como
carcteres.
BufferedReader lee caracteres y les agrupa en lneas.
Flujo de carcteres BufferedReader:
Abre un flujo que lee desde un flujo de entrada de caracteres,
agrupa los caracteres a leer en un buffer (una zona de
memoria que sirve de tapn mientras se estn transmitiendo
los datos) , as permitiendo leer lineas enteras:
public String readLine() throws IOException
Creamos un flujo BufferedReader a partir de un flujo de
caracteres:
public BufferedReader(Reader in)
FileReader(String
fileName)
throws
public
FileWriter(String
fileName)
throws
Ejemplo: OutStream.java
char Unicode, 16 bits
byte, 8 bits.
Lectura
Las clases Reader e InputStream son similares aunque se
refieren a distintos tipos de datos, lo mismo ocurre con Writer
y OutputSream.
Por ejemplo, Reader proporciona tres mtodos para leer un
carcter char o un array de caracteres
int read()
int read(char buf[])
int read(char buf[], int offset, int len)