PDF de programación - Entrada/Salida con ficheros en Java

Imágen de pdf Entrada/Salida con ficheros en Java

Entrada/Salida con ficheros en Javagráfica de visualizaciones

Actualizado el 24 de Octubre del 2020 (Publicado el 14 de Mayo del 2020)
1.058 visualizaciones desde el 14 de Mayo del 2020
219,3 KB
24 paginas
Creado hace 11a (31/03/2013)
Entrada/Salida con ficheros en Java

Alberto Cortés <[email protected]>

31 de marzo de 2013

Índice general

1. Introducción

1.1. Propósito de este documento . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2. Contexto general
1.3. Sistemas de ficheros
. . . . . . . . . . . . . . . . . . . . . . . . .

2. Paths: nombrado de ficheros
2.1. Paths relativos y absolutos
. . . . . . . . . . . . . . . . . . . . .
2.2. Paths en Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3. Ejemplo de uso . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3. Ficheros

3.1. Existencia y comprobación de permisos
. . . . . . . . . . . . . .
3.2. Creación y borrado . . . . . . . . . . . . . . . . . . . . . . . . . .

4. Lectura de ficheros

4.1. Tablas de caracteres (charsets)
. . . . . . . . . . . . . . . . . . .
4.2. Lectura a un array de bytes . . . . . . . . . . . . . . . . . . . . .
4.3. Buffers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4. Lectura a un buffer . . . . . . . . . . . . . . . . . . . . . . . . . .

5. Escritura de ficheros

5.1. Modos de acceso, el parámetro OpenOptions . . . . . . . . . . .
5.2. Escritura desde arrays de bytes . . . . . . . . . . . . . . . . . . .
5.3. Escritura desde buffers . . . . . . . . . . . . . . . . . . . . . . . .
5.4. Ejemplos más avanzados . . . . . . . . . . . . . . . . . . . . . . .

6. Ficheros binarios

2
2
2
3

4
5
5
6

7
7
8

9
9
11
13
13

16
16
16
17
18

21

1

Capítulo 1

Introducción

1.1. Propósito de este documento

Este documento es una breve introducción a cómo funciona la entrada/salida

con ficheros en Java.

Está dirigido a alumnos de primero de carrera sin ninguna experiencia en
Java, más allá de los conocimientos mínimos sobre la sintaxis del lenguaje, sus
estructuras básicas y los conocimientos de orientación a objetos típicos de los
primeros capítulos de cualquier libro de introducción a la programación en Java.
Haré un repaso sucinto del API y las clases involucradas y algunos de los
conceptos de sistemas operativos y sistemas de ficheros necesarios. Acompaño
las explicaciones de ejemplos.

En este documento no se explican aspectos avanzados del manejo de ficheros
como los canales, cerrojos, pattern-matching, mapeado directo a memoria de
ficheros, multiplexado, selectors, acceso aleatorio, operaciones no bloqueantes,
multithreading, ni técnicas de acceso asíncronas.

La versión de Java utilizada en este documento es la 1.7.0_17, por lo que
la información que aquí se incluye trata sobre NIO.2 (New I/O version 2 ), el
nuevo sistema de entrada/salida con ficheros introducido en la versión 1.7 de
Java en 2011-06-07.

La mayor parte de este documento está basado en The Java Tutorials, para

la versión SE 7 de Java.

1.2. Contexto general

La mayoría del soporte de entrada/salida a ficheros en Java se incluye en el
paquete java.nio.file. Aunque dicho API comprende numerosas clases, solo
existen unas pocas de ellas que sirven de puntos de entrada al API, lo que
simplifica considerablemente su manejo.

2

1.3. Sistemas de ficheros

Un fichero es una abstracción del sistema operativo para el almacenamien-
to genérico de datos. La parte del sistema operativo encargada del manejo de
ficheros se denomina “sistema de ficheros”.

Los sistemas de ficheros tradicionales se encargan de organizar, almacenar y
nombrar (identificar mediante un nombre) los ficheros almacenados en disposi-
tivos de almacenamiento permanente, como los discos duros, las memorias USB
de estádo sólido, los DVDs. . .

Hoy en día, los sistemas de ficheros más conocidos son “ext3” para sistemas
operativos Linux, “NTFS” para sistemas basados en Windows NT, como Win-
dows XP o Windows 7, e “ISO9660” y “UDF” para dispositivos ópticos como
CDs y DVDs.

Aunque cada sistema de ficheros ofrece su propia visión de los datos alma-
cenados en un disco y los gestiona y ordena a su manera, todos ellos comparten
algunos aspectos generales:

Los ficheros suelen organizarse en estructuras jerárquicas de directorios.
Estos directorios son contenedores de ficheros (y de otros directorios) que
permiten organizar los datos del disco.

El nombre de un fichero está relacionado con su posición en el árbol de
directorios que lo contiene, lo que permite no sólo identificar unívocamente
cada fichero, sino encontrarlo en el disco a partir de su nombre.

Los ficheros suelen tener una serie de metadatos asociados, como pueden
ser su fecha de creación, la fecha de última modificación, su propietario
o los permisos que tienen diferentes usuarios sobre ellos (lectura, escri-
tura. . . ). Esto convierte al sistema de ficheros en una base de datos de
los contenidos almacenados en el disco que puede ser consultada según
múltiples criterios de búsqueda.

3

Capítulo 2

Paths: nombrado de ficheros

El nombre de un fichero se conoce como su path (la traducción más aproxima-
da en castellano sería ruta, pero incluso en castellano utilizamos su denominación
inglesa).

Por ejemplo, el nombre completo del fichero (su path) donde estoy escribien-

do este documento es

/home/alcortes/room/current/Java-File-IO/tex/informe.tex

En mi ordenador, no puede existir otro fichero con ese mismo nombre, aunque

seguramente existen muchos ficheros con el nombre corto “informe.tex”.

Desde luego el path de un fichero cambia dependiendo del sistema de ficheros
utilizado, por ejemplo, en sistemas operativos Linux, todos los ficheros están
contenidos en un directorio raiz o en directorios que cuelgan de él.

Sin embargo en sistemas de ficheros tipo NTFS, los ficheros están almacena-
dos en una “unidad” (identificada por una letra del alfabeto), esta unidad puede
contener a su vez ficheros o directorios. Tradicionalmente, además, en el mundo
Windows, los nombres de ficheros suelen tener una extensión (típicamente un
“.” y tres letras) que ayuda a identificar el tipo de contenido almacenado en ese
fichero.

En ambos sistemas podemos localizar un fichero a partir de su nombre (su

path), veamos un par de ejemplos:

Linux: /home/alcortes/mi_fichero: Bajo el directorio raiz (/), existe un
directorio /home/, dentro del cual existe un directorio /home/alcortes/
(de nombre corto “alcortes”), dentro del cual existe un fichero
/home/alcortes/mi_fichero, de nombre corto “mi_fichero”.

Windows 7: C:\Mis documentos\fichero.txt: Bajo la unidad C, exis-
te un directorio C:\Mis documentos\, dentro del cual existe un fiche-
ro C:\Mis documentos\fichero.txt, de nombre corto “fichero.txt”, que
tiene una extensión típica de los antiguos sistemas Windows de tres letras
(“txt”).

4

Como se ve en estos ejemplos, los paths tienen un aspecto bien diferente
según el sistema operativo, en Linux todo cuelga del directorio raiz y se utiliza
el carácter / para separar directorios y ficheros entre si. En Windows en cambio,
se parte de una letra de unidad y se separan los directorios con el carácter \.

También es importante comentar que cada sistema operativo tiene sus pro-
pias restricciones sobre otros aspectos del path, por ejemplo, en el sistema de
ficheros FAT (utilizado en sistemas MSDOS) no se distinguían entre mayús-
culas y minúsculas, por lo que el fichero C:\FiChEro.TXT era el mismo que
C:\fichero.txt. Tampoco soportaba nombres cortos de fichero de más de 8
caracteres, ni caracteres fuera del estándar ASCII (como á, ñ, Å, ¿, α. . . ). La
mayoría de estas limitaciones se han ido resolviendo en los nuevos sistemas de
ficheros.

2.1. Paths relativos y absolutos

Hasta ahora solo hemos visto ejemplos de path absolutos, que son aquellos
que permiten identificar unívocamente un fichero y su localización sin necesidad
de más datos.

Un path relativo especifica la ruta a un fichero a partir de un directorio de

referencia, que se conoce como el directorio de trabajo.

Veamos algunos ejemplos:

Si el directorio de trabajo es /home/alcortes/, el path relativo
mi_fichero identifica al fichero /home/alcortes/mi_fichero.

Si el directorio de trabajo es /home/alcortes/, el path relativo
mi_proyecto/mi_fichero identifica al fichero
/home/alcortes/mi_proyecto/mi_fichero.

Si el directorio de trabajo es /home/alcortes/, el path relativo
../mcfp/mi_fichero identifica al fichero /home/mcfp/mi_fichero. El di-
rectorio ../ es una alias al directorio padre de aquel al que sucede.

Si el directorio de trabajo es /home/alcortes/, el path relativo
./mi_proyecto/mi_fichero identifica al fichero
/home/alcortes/mi_proyecto/mi_fichero. El directorio ./ es una alias
del directorio de trabajo.

Para distinguir un path relativo de uno absoluto, la clave está en darse cuenta
que un path relativo no viene precedido de la raiz del sistema de ficheros (/ en
Linux) o por una letra de unidad en Windows (C:\ por ejemplo).

2.2. Paths en Java

La interfaz java.nio.file.Path representa un path y las clases que im-
plementen esta interfaz puede utilizarse para localizar ficheros en el sistema de
ficheros.

5

La forma mas sencilla de construir un objeto que cumpla la interfaz Path
es a partir de la clase java.nio.file.Paths, que tiene métodos estáticos que
retornan objetos Path a partir de una representación tipo String del path
deseado, por ejemplo:

Path p = Paths.get("/home/alcortes/mi_fichero");

Por supuesto, no es necesario que los ficheros existan de verdad en el disco
duro para que se puedan crear los objetos Path correspondientes: La represen-
tación y manejo de paths en Java no está restringida por la existencia de esos
ficheros o directorios en el sistema de ficheros.

El interfaz Path declara numerosos métodos que resultan muy útiles para
el manejo de paths, como por ejemplo, obtener el nombre corto de un fichero,
obtener el directorio que lo contiene, resolver paths relativos, etc.

Nótese que trabajar con paths no tiene nada que ver con trabajar con el
contenido de los ficheros que representan, por ejemplo, modificar el contenido
de un fichero es una operación que poco tiene que ver con su nombre o su
localización en el sistema de ficheros.

Una instancia de tipo Path refleja el sistema de
  • Links de descarga
http://lwp-l.com/pdf17650

Comentarios de: Entrada/Salida con ficheros en Java (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad