1. Sección 14.1 Introducción
• Los datos que se almacenan en variables y arreglos son temporales; se
pierden cuando una variable local queda fuera
de alcance, o cuando el programa termina. Las computadoras utilizan archivos
para la retención a largo plazo de
grandes cantidades de datos, incluso después de que los programas que
crearon los datos terminan de ejecutarse.
• Los datos persistentes que se mantienen en archivos existen más allá de la
duración de la ejecución del programa.
• Las computadoras almacenan los archivos en dispositivos de almacenamiento
secundario, como los discos duros.
Sección 14.2 Jerarquía de datos
• El elemento de datos más pequeño en una computadora puede asumir el
valor 0 o 1, y se le conoce como bit. En
última instancia, una computadora procesa todos los elementos de datos como
combinaciones de ceros y unos.
• El conjunto de caracteres de la computadora es el conjunto de todos los
caracteres que se utilizan para escribir programas
y representar datos.
• Los caracteres en Java son Unicode y están compuestos de dos bytes, cada
uno de los cuales se compone de ocho
bits.
• Así como los caracteres están compuestos de bits, los campos se componen
de caracteres o bytes. Un campo es un
grupo de caracteres o bytes que transmite un signifi cado.
• Los elementos de datos procesados por las computadoras forman una
jerarquía de datos, la cual se vuelve más grande
y compleja en estructura, a medida que progresamos de bits a caracteres,
luego a campos, y así en lo sucesivo.
• Por lo general, varios campos componen un registro (que se implementa
como class en Java).
• Un registro es un grupo de campos relacionados.
• Un archivo es un grupo de registros relacionados.
• Para facilitar la obtención de registros específi cos de un archivo, se elije por
lo menos un campo en cada registro
como clave. Una clave de registro identifi ca que un registro pertenece a una
persona o entidad específi ca, y es único
para cada registro.
• Existen muchas formas de organizar los registros en un archivo. La más
común se llama archivo secuencial, en el cual
los registros se almacenan en orden, en base al campo clave de registro.
• Por lo general, a un grupo de archivos relacionados se le denomina base de
datos. Una colección de programas
diseñados para crear y administrar bases de datos se conoce como sistema de
administración de bases de datos
(DBMS).
Sección 14.3 Archivos y flujos
• Java ve a cada archivo como un flujo secuencial de bytes.
• Cada sistema operativo cuenta con un mecanismo para determinar el fi n de
un archivo, como un marcador de fi n
2. de archivo o la cuenta de los bytes totales en el archivo, que se registra en una
estructura de datos administrativa,
manejada por el sistema.
• Los flujos basados en bytes representan datos en formato binario.
• Los flujos basados en caracteres representan datos como secuencias de
caracteres.
• Los archivos que se crean usando flujos basados en bytes son archivos
binarios. Los archivos que se crean usando
flujos basados en caracteres son archivos de texto. Los archivos de texto se
pueden leer mediante editores de texto,
mientras que los archivos binarios se leen mediante un programa que convierte
esos datos en un formato legible para
los humanos.
• Java también puede asociar los flujos con distintos dispositivos. Tres objetos fl
ujo se asocian con dispositivos cuando
un programa de Java empieza a ejecutarse: System.in, System.out y
System.err.
• El paquete java.io incluye definiciones para las clases de fl ujos, como
FileInputStream (para la entrada basada
en bytes de un archivo), FileOutputStream (para la salida basada en bytes
hacia un archivo), FileReader (para la entrada
basada en caracteres de un archivo) y FileWriter (para la salida basada en
caracteres hacia un archivo). Los
archivos se abren creando objetos de estas clases de flujos.
Sección 14.4 La clase File
• La clase File se utiliza para obtener información acerca de los archivos y
directorios.
• Las operaciones de entrada y salida basadas en caracteres se pueden llevar
a cabo con las clases Scanner y Formatter.
• La clase Formatter permite mostrar datos con formato en la pantalla, o
enviarlos a un archivo, de una manera
similar a System.out.printf.
• La ruta de un archivo o directorio especifi ca su ubicación en el disco.
• Una ruta absoluta contiene todos los directorios, empezando con el directorio
raíz, que conducen hacia un archivo
o directorio específi co. Cada archivo o directorio en una unidad de disco tiene
el mismo directorio raíz en su ruta.
• Por lo general, una ruta relativa empieza desde el directorio en el que se
empezó a ejecutar la aplicación.
• Un carácter separador se utiliza para separar directorios y archivos en la ruta.
Sección 14.5 Archivos de texto de acceso secuencial
• Java no impone una estructura en un archivo; las nociones como los registros
no existen como parte del lenguaje de
Java. El programador debe estructurar los archivos para satisfacer los
requerimientos de una aplicación.
• Para obtener datos de un archivo en forma secuencial, los programas
comúnmente empiezan a leer desde el principio
del archivo y leen todos los datos en forma consecutiva, hasta encontrar la
información deseada.
3. • Los datos en muchos archivos secuenciales no se pueden modifi car sin el
riesgo de destruir otros datos en el archivo.
Por lo tanto, los registros en un archivo de acceso secuencial normalmente no
se actualizan directamente en su ubicación.
En vez de ello, se vuelve a escribir el archivo completo.
Sección 14.6 Serialización de objetos
• Java cuenta con un mecanismo llamado serialización de objetos, el cual
permite escribir o leer objetos completos
mediante un fl ujo.
• Un objeto serializado es un objeto que se representa como una secuencia de
bytes, e incluye los datos del
objeto, así como información acerca del tipo del objeto y los tipos de datos
almacenados en el mismo.
• Una vez que se escribe un objeto serializado en un archivo, se puede leer del
archivo y deserializarse; es decir,
se puede utilizar la información de tipo y los bytes que representan al objeto
para recrearlo en la memoria.
• Las clases ObjectInputStream y ObjectOutputStream, que implementan en
forma respectiva a las interfaces
ObjectInput y ObjectOutput, permiten leer o escribir objetos completos de/a un
fl ujo (posiblemente un
archivo).
• Sólo las clases que implementan a la interfaz Serializable pueden serializarse
y deserializarse con objetos
ObjectOutputStream y ObjectInputStream.
Sección 14.7 Clases adicionales de java.io
• La interfaz ObjectOutput contiene el método writeObject, el cual recibe un
objeto Object que implementa a la
interfaz Serializable como argumento y escribe su información en un objeto
OutputStream.
• La interfaz ObjectInput contiene el método readObject, que lee y devuelve una
referencia a un objeto Object
de un objeto InputStream. Una vez que se ha leído un objeto, su referencia
puede convertirse al tipo actual del
objeto.
• El uso de búfer es una técnica para mejorar el rendimiento de E/S. Con un
objeto BufferedOutputStream, cada
instrucción de salida no necesariamente produce una transferencia física real
de datos al dispositivo de salida. En vez
de ello, cada operación de salida se dirige hacia una región en memoria
llamada búfer, la cual es lo bastante grande
como para contener los datos de muchas operaciones de salida. La
transferencia actual al dispositivo de salida se
realiza entonces en una sola operación de salida física extensa cada vez que
se llena el búfer.
• Con un objeto BufferedInputStream, muchos trozos “lógicos” de datos de un
archivo se leen como una sola operación
de entrada física extensa y se colocan en un búfer de memoria. A medida que
un programa solicita cada nuevo
4. trozo de datos, se obtiene del búfer. Cuando el búfer está vacío, se lleva a cabo
la siguiente operación de entrada física
real desde el dispositivo de entrada, para leer el nuevo grupo de trozos
“lógicos” de datos.
Resumen 645
646 Capítulo 14 Archivos y fl ujos
Sección 14.8 Abrir archivos con JFileChooser
• La clase JFileChooser se utiliza para mostrar un cuadro de diálogo, que
permite a los usuarios de un programa
seleccionar archivos con facilidad, mediante una GUI.
aplicación de acceso directo
apuntador de posición de archivo
archivo
archivo binario
archivo de acceso secuencial
archivo de procesamiento por lotes
archivo de sólo lectura
archivo de texto
archivos de acceso directo
arreglo de bytes envuelto
base de datos
bit (dígito binario)
búfer
búfer de memoria
byte, tipo de datos
campo
CANCEL_OPTION, constante de la clase JFileChooser
canRead, método de la clase File
canWrite, método de la clase File
capacidad
-classpath, argumento de línea de comandos para java
-classpath, argumento de línea de comandos para
javac
clave de registro
conjunto de caracteres
conjunto de caracteres ASCII (Código estándar estadounidense
para el intercambio de información)
DataInput, interfaz
DataInputStream, clase
DataOutput, interfaz
DataOutputStream, clase
datos persistentes
dígito decimal
DIRECTORIES_ONLY, constante de la clase JFileChooser
directorio
directorio padre
directorio raíz
disco
disco óptico
dispositivos de almacenamiento secundario
5. EndOfFileException, excepción
envoltura de objetos fl ujo
exists, método de la clase File
exit, método de la clase System
File, clase
FileInputStream, clase
FileOutputStream, clase
FileReader, clase
FILES_AND_DIRECTORIES, constante de la clase JFile-
Chooser
FILES_ONLY, constante de la clase JFileChooser
FileWriter, clase
fl ujo basado en bytes
fl ujo basado en caracteres
fl ujo de bytes
Formatter, clase
getAbsolutePath, método de la clase File
getName, método de la clase File
getParent, método de la clase File
getPath, método de la clase File
getSelectedFile, método de la clase JFileChooser
InputStream, clase
interfaz de marcado
IOException, excepción
isAbsolute, método de la clase File
isDirectory, método de la clase File
isFile, método de la clase File
java.io, paquete
jerarquía de datos
JFileChooser, clase
JFileChooser, cuadro de diálogo
lastModified, método de la clase File
length, método de la clase File
list, método de la clase File
marcador de fi n de archivo
nombre de directorio
NoSuchElementException, excepción
ObjectInputStream, clase
ObjectOutputStream, clase
objeto deserializado
objeto fl ujo
objeto fl ujo de error estándar
objeto serializado
operación física de entrada
operación física de salida
operaciones lógicas de entrada
operaciones lógicas de salida
OutputStream, clase
pathSeparator, campo static de la clase File
PrintStream, clase
6. PrintWriter, clase
procesamiento de archivos
procesamiento de fl ujos
Reader, clase
readLine, método de la clase BufferedReader
readObject, método de la clase ObjectInputStream
readObject, método de la interfaz ObjectInput
registro
registro de longitud fi ja
ruta absoluta
Terminología
ruta relativa
secuencia de comandos de shell
Serializable, interfaz
serialización de objetos
setErr, método de la clase System
setIn, método de la clase System
setOut, método de la clase System
setSelectionMode de la clase JFileChooser
showOpenDialog de la clase JFileChooser
sistema de administración de bases de datos (DBMS)
System.err (fl ujo de error estándar)
transient, palabra clave
truncada
Unicode, conjunto de caracteres
URI (Identifi cador uniforme de recursos)
writeBoolean, método de la interfaz DataOutput
writeByte, método de la interfaz DataOutput
writeBytes, método de la interfaz DataOutput
writeChar, método de la interfaz DataOutput
writeChars, método de la interfaz DataOutput
writeDouble, método de la interfaz DataOutput
writeFloat, método de la interfaz DataOutput
writeInt, método de la interfaz DataOutput
writeLong, método de la interfaz DataOutput
writeObject, método de la clase ObjectOutputStream
writeObject, método de la interfaz ObjectOutput
Writer, clase
writeShort, método de la interfaz DataOutput
writeUTF, método de la interfaz DataOutputSección 14.1 Introducción
• Los datos que se almacenan en variables y arreglos son temporales; se
pierden cuando una variable local queda fuera
de alcance, o cuando el programa termina. Las computadoras utilizan archivos
para la retención a largo plazo de
grandes cantidades de datos, incluso después de que los programas que
crearon los datos terminan de ejecutarse.
• Los datos persistentes que se mantienen en archivos existen más allá de la
duración de la ejecución del programa.
• Las computadoras almacenan los archivos en dispositivos de almacenamiento
secundario, como los discos duros.
7. Sección 14.2 Jerarquía de datos
• El elemento de datos más pequeño en una computadora puede asumir el
valor 0 o 1, y se le conoce como bit. En
última instancia, una computadora procesa todos los elementos de datos como
combinaciones de ceros y unos.
• El conjunto de caracteres de la computadora es el conjunto de todos los
caracteres que se utilizan para escribir programas
y representar datos.
• Los caracteres en Java son Unicode y están compuestos de dos bytes, cada
uno de los cuales se compone de ocho
bits.
• Así como los caracteres están compuestos de bits, los campos se componen
de caracteres o bytes. Un campo es un
grupo de caracteres o bytes que transmite un signifi cado.
• Los elementos de datos procesados por las computadoras forman una
jerarquía de datos, la cual se vuelve más grande
y compleja en estructura, a medida que progresamos de bits a caracteres,
luego a campos, y así en lo sucesivo.
• Por lo general, varios campos componen un registro (que se implementa
como class en Java).
• Un registro es un grupo de campos relacionados.
• Un archivo es un grupo de registros relacionados.
• Para facilitar la obtención de registros específi cos de un archivo, se elije por
lo menos un campo en cada registro
como clave. Una clave de registro identifi ca que un registro pertenece a una
persona o entidad específi ca, y es único
para cada registro.
• Existen muchas formas de organizar los registros en un archivo. La más
común se llama archivo secuencial, en el cual
los registros se almacenan en orden, en base al campo clave de registro.
• Por lo general, a un grupo de archivos relacionados se le denomina base de
datos. Una colección de programas
diseñados para crear y administrar bases de datos se conoce como sistema de
administración de bases de datos
(DBMS).
Sección 14.3 Archivos y fl ujos
• Java ve a cada archivo como un fl ujo secuencial de bytes.
• Cada sistema operativo cuenta con un mecanismo para determinar el fi n de
un archivo, como un marcador de fi n
de archivo o la cuenta de los bytes totales en el archivo, que se registra en una
estructura de datos administrativa,
manejada por el sistema.
• Los fl ujos basados en bytes representan datos en formato binario.
• Los fl ujos basados en caracteres representan datos como secuencias de
caracteres.
• Los archivos que se crean usando fl ujos basados en bytes son archivos
binarios. Los archivos que se crean usando
fl ujos basados en caracteres son archivos de texto. Los archivos de texto se
pueden leer mediante editores de texto,
8. mientras que los archivos binarios se leen mediante un programa que convierte
esos datos en un formato legible para
los humanos.
• Java también puede asociar los fl ujos con distintos dispositivos. Tres objetos
fl ujo se asocian con dispositivos cuando
un programa de Java empieza a ejecutarse: System.in, System.out y
System.err.
• El paquete java.io incluye defi niciones para las clases de fl ujos, como
FileInputStream (para la entrada basada
en bytes de un archivo), FileOutputStream (para la salida basada en bytes
hacia un archivo), FileReader (para la entrada
basada en caracteres de 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.
Sección 14.4 La clase File
• La clase File se utiliza para obtener información acerca de los archivos y
directorios.
• Las operaciones de entrada y salida basadas en caracteres se pueden llevar
a cabo con las clases Scanner y Formatter.
• La clase Formatter permite mostrar datos con formato en la pantalla, o
enviarlos a un archivo, de una manera
similar a System.out.printf.
• La ruta de un archivo o directorio especifi ca su ubicación en el disco.
• Una ruta absoluta contiene todos los directorios, empezando con el directorio
raíz, que conducen hacia un archivo
o directorio específi co. Cada archivo o directorio en una unidad de disco tiene
el mismo directorio raíz en su ruta.
• Por lo general, una ruta relativa empieza desde el directorio en el que se
empezó a ejecutar la aplicación.
• Un carácter separador se utiliza para separar directorios y archivos en la ruta.
Sección 14.5 Archivos de texto de acceso secuencial
• Java no impone una estructura en un archivo; las nociones como los registros
no existen como parte del lenguaje de
Java. El programador debe estructurar los archivos para satisfacer los
requerimientos de una aplicación.
• Para obtener datos de un archivo en forma secuencial, los programas
comúnmente empiezan a leer desde el principio
del archivo y leen todos los datos en forma consecutiva, hasta encontrar la
información deseada.
• Los datos en muchos archivos secuenciales no se pueden modifi car sin el
riesgo de destruir otros datos en el archivo.
Por lo tanto, los registros en un archivo de acceso secuencial normalmente no
se actualizan directamente en su ubicación.
En vez de ello, se vuelve a escribir el archivo completo.
Sección 14.6 Serialización de objetos
• Java cuenta con un mecanismo llamado serialización de objetos, el cual
permite escribir o leer objetos completos
mediante un fl ujo.
• Un objeto serializado es un objeto que se representa como una secuencia de
bytes, e incluye los datos del
9. objeto, así como información acerca del tipo del objeto y los tipos de datos
almacenados en el mismo.
• Una vez que se escribe un objeto serializado en un archivo, se puede leer del
archivo y deserializarse; es decir,
se puede utilizar la información de tipo y los bytes que representan al objeto
para recrearlo en la memoria.
• Las clases ObjectInputStream y ObjectOutputStream, que implementan en
forma respectiva a las interfaces
ObjectInput y ObjectOutput, permiten leer o escribir objetos completos de/a un
fl ujo (posiblemente un
archivo).
• Sólo las clases que implementan a la interfaz Serializable pueden serializarse
y deserializarse con objetos
ObjectOutputStream y ObjectInputStream.
Sección 14.7 Clases adicionales de java.io
• La interfaz ObjectOutput contiene el método writeObject, el cual recibe un
objeto Object que implementa a la
interfaz Serializable como argumento y escribe su información en un objeto
OutputStream.
• La interfaz ObjectInput contiene el método readObject, que lee y devuelve una
referencia a un objeto Object
de un objeto InputStream. Una vez que se ha leído un objeto, su referencia
puede convertirse al tipo actual del
objeto.
• El uso de búfer es una técnica para mejorar el rendimiento de E/S. Con un
objeto BufferedOutputStream, cada
instrucción de salida no necesariamente produce una transferencia física real
de datos al dispositivo de salida. En vez
de ello, cada operación de salida se dirige hacia una región en memoria
llamada búfer, la cual es lo bastante grande
como para contener los datos de muchas operaciones de salida. La
transferencia actual al dispositivo de salida se
realiza entonces en una sola operación de salida física extensa cada vez que
se llena el búfer.
• Con un objeto BufferedInputStream, muchos trozos “lógicos” de datos de un
archivo se leen como una sola operación
de entrada física extensa y se colocan en un búfer de memoria. A medida que
un programa solicita cada nuevo
trozo de datos, se obtiene del búfer. Cuando el búfer está vacío, se lleva a cabo
la siguiente operación de entrada física
real desde el dispositivo de entrada, para leer el nuevo grupo de trozos
“lógicos” de datos.
Resumen 645
646 Capítulo 14 Archivos y fl ujos
Sección 14.8 Abrir archivos con JFileChooser
• La clase JFileChooser se utiliza para mostrar un cuadro de diálogo, que
permite a los usuarios de un programa
seleccionar archivos con facilidad, mediante una GUI.
aplicación de acceso directo
apuntador de posición de archivo
10. archivo
archivo binario
archivo de acceso secuencial
archivo de procesamiento por lotes
archivo de sólo lectura
archivo de texto
archivos de acceso directo
arreglo de bytes envuelto
base de datos
bit (dígito binario)
búfer
búfer de memoria
byte, tipo de datos
campo
CANCEL_OPTION, constante de la clase JFileChooser
canRead, método de la clase File
canWrite, método de la clase File
capacidad
-classpath, argumento de línea de comandos para java
-classpath, argumento de línea de comandos para
javac
clave de registro
conjunto de caracteres
conjunto de caracteres ASCII (Código estándar estadounidense
para el intercambio de información)
DataInput, interfaz
DataInputStream, clase
DataOutput, interfaz
DataOutputStream, clase
datos persistentes
dígito decimal
DIRECTORIES_ONLY, constante de la clase JFileChooser
directorio
directorio padre
directorio raíz
disco
disco óptico
dispositivos de almacenamiento secundario
EndOfFileException, excepción
envoltura de objetos fl ujo
exists, método de la clase File
exit, método de la clase System
File, clase
FileInputStream, clase
FileOutputStream, clase
FileReader, clase
FILES_AND_DIRECTORIES, constante de la clase JFile-
Chooser
FILES_ONLY, constante de la clase JFileChooser
FileWriter, clase
11. fl ujo basado en bytes
fl ujo basado en caracteres
fl ujo de bytes
Formatter, clase
getAbsolutePath, método de la clase File
getName, método de la clase File
getParent, método de la clase File
getPath, método de la clase File
getSelectedFile, método de la clase JFileChooser
InputStream, clase
interfaz de marcado
IOException, excepción
isAbsolute, método de la clase File
isDirectory, método de la clase File
isFile, método de la clase File
java.io, paquete
jerarquía de datos
JFileChooser, clase
JFileChooser, cuadro de diálogo
lastModified, método de la clase File
length, método de la clase File
list, método de la clase File
marcador de fi n de archivo
nombre de directorio
NoSuchElementException, excepción
ObjectInputStream, clase
ObjectOutputStream, clase
objeto deserializado
objeto fl ujo
objeto fl ujo de error estándar
objeto serializado
operación física de entrada
operación física de salida
operaciones lógicas de entrada
operaciones lógicas de salida
OutputStream, clase
pathSeparator, campo static de la clase File
PrintStream, clase
PrintWriter, clase
procesamiento de archivos
procesamiento de fl ujos
Reader, clase
readLine, método de la clase BufferedReader
readObject, método de la clase ObjectInputStream
readObject, método de la interfaz ObjectInput
registro
registro de longitud fi ja
ruta absoluta
Terminología
ruta relativa
12. secuencia de comandos de shell
Serializable, interfaz
serialización de objetos
setErr, método de la clase System
setIn, método de la clase System
setOut, método de la clase System
setSelectionMode de la clase JFileChooser
showOpenDialog de la clase JFileChooser
sistema de administración de bases de datos (DBMS)
System.err (fl ujo de error estándar)
transient, palabra clave
truncada
Unicode, conjunto de caracteres
URI (Identifi cador uniforme de recursos)
writeBoolean, método de la interfaz DataOutput
writeByte, método de la interfaz DataOutput
writeBytes, método de la interfaz DataOutput
writeChar, método de la interfaz DataOutput
writeChars, método de la interfaz DataOutput
writeDouble, método de la interfaz DataOutput
writeFloat, método de la interfaz DataOutput
writeInt, método de la interfaz DataOutput
writeLong, método de la interfaz DataOutput
writeObject, método de la clase ObjectOutputStream
writeObject, método de la interfaz ObjectOutput
Writer, clase
writeShort, método de la interfaz DataOutput
writeUTF, método de la interfaz DataOutput