612
Capítulo 14 Archivos y fl ujos
el programa llega al fi n del fl ujo; el programa no necesita saber cómo representa la plataforma subyacente a los
archivos o fl ujos. En algunos casos, la indicación de fi n de archivo ocurre como una excepción. En otros casos, la
indicación es un valor de retorno de un método invocado en un objeto procesador de fl ujos.
Los fl ujos de archivos se pueden utilizar para la entrada y salida de datos, ya sea como caracteres o bytes. Los
fl ujos que reciben y envían bytes a archivos se conocen como
fl ujos basados en bytes
, y almacenan datos en su
formato binario. Los fl ujos que reciben y envían caracteres de/a los archivos se conocen como
fl ujos basados en
caracteres
, y almacenan datos como una secuencia de caracteres. Por ejemplo, si se almacenara el valor
5
usando
un fl ujo basado en bytes, sería en el formato binario del valor numérico
5
, o
101
. Si se almacenara el valor
5
usando un fl ujo basado en caracteres, sería en el formato binario del carácter
5
, o
00000000 00110101
(ésta es
la representación binaria para el valor numérico
53
, el cual indica el carácter
5
en el conjunto de caracteres Uni-
code). La diferencia entre el valor numérico
5
y el carácter
5
es que el valor numérico se puede utilizar como un
entero en los cálculos, mientras que el carácter
5
es simplemente un carácter que puede utilizarse en una cadena
de texto, como en
"Sarah Miller tiene 15 años de edad"
. Los archivos que se crean usando fl ujos basados
en bytes se conocen como
archivos binarios
, mientras que los archivos que se crean usando fl ujos basados en
caracteres se conocen como
archivos de texto
. Los archivos de texto se pueden leer con editores de texto, mientras
que los archivos binarios se leen mediante un programa que convierte los datos en un formato que pueden leer
los humanos.
Un programa de Java
abre
un archivo creando un objeto y asociándole un fl ujo de bytes o de caracteres. En
breve hablaremos sobre las clases que se utilizan para crear esos objetos. Java también puede asociar fl ujos de bytes
con distintos dispositivos. De hecho, Java crea tres objetos fl ujo que se asocian con dispositivos cuando un pro-
grama de Java empieza a ejecutarse:
System.in,
System.out
y
System.err
El objeto
System.in
(el objeto fl ujo
de entrada estándar) generalmente permite a un programa recibir bytes desde el teclado; el objeto
System.out
(el objeto fl ujo estándar de salida) generalmente permite a un programa mostrar datos en la pantalla; y el objeto
System.err
(el objeto fl ujo estándar de error) generalmente permite a un programa mostrar mensajes de error
en la pantalla. Cada uno de estos fl ujos puede
redirigirse
. Para
System.in
, esta capacidad permite al programa
leer bytes desde un origen distinto. Para
System.out
y
System.err
, esta capacidad permite que la salida se envíe
a una ubicación distinta, como un archivo en disco. La clase
System
proporciona los métodos
setIn
,
setOut
y
setErr
para redirigir los fl ujos estándar de entrada, salida y error, respectivamente.
Los programas de Java realizan el procesamiento de archivos utilizando clases del paquete
java.io
. Este
paquete incluye defi niciones para las clases de fl ujo como
FileInputStream
(para la entrada basada en bytes des-
de un archivo),
FileOutputStream
(para la salida basada en bytes hacia un archivo),
FileReader
(para la entra-
da basada en caracteres desde un archivo) y
FileWriter
(para la salida basada en caracteres hacia un archivo). Los
archivos se abren creando objetos de estas clases de fl ujos, que heredan de las clases
InputStream
,
OutputStream
,
Reader
y
Writer
, respectivamente (más adelante en este capítulo hablaremos sobre estas clases). Por lo tanto, los
métodos de estas clases de fl ujos pueden aplicarse a los fl ujos de archivos también.
Java contiene clases que permiten al programador realizar operaciones de entrada y salida con objetos o varia-
bles de tipos de datos primitivos. Los datos se siguen almacenando como bytes o caracteres tras bambalinas, lo
cual permite al programador leer o escribir datos en forma de enteros, cadenas u otros tipos de datos, sin tener que
preocuparse por los detalles acerca de convertir dichos valores al formato de bytes. Para realizar dichas operaciones
de entrada y salida, pueden usarse objetos de las clases
ObjectInputStream
, y
ObjectOutputStream
junto con
las clases de fl ujos de archivos basadas en bytes
FileInputStream
y
FileOutputStream
(en breve hablaremos
con más detalle sobre estas clases). La jerarquía completa de clases en el paquete
java.io
puede consultarse en la
documentación en línea, en la página:
java.sun.com/javase/6/docs/api/java/io/package-tree.html
0
123456789
...
...
n-1
marcador de fin de archivo
Figura 14.2
| La manera en que Java ve a un archivo de n bytes.
14_MAQ_CAP_14_DEITEL.indd612
4/19/081:28:10AM