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