Professional Documents
Culture Documents
y archivos
Usar la clase File
"Mmh", dice el programador novato, "es un poco molesto; mi programa
intentaba abrir un archivo que no exista, justo cuando lo ejecutaba para el
gran jefe". "Bien", decimos, "por qu no probar primero si exista el archivo
utilizando el mtodo exists de la clase File?". El PN dice, "iExplquemelo!"
Puede utilizar la clase File para determinar muchas cosas sobre archivos,
como su tamao, si se puede escribir sobre ellos, si un elemento es un
archivo, directorio o conexin de nombres, y ms an. Aqu tiene el diagrama
de herencia para la clase File:
j ava.lang .0bject
I
+-java.io .File
Observe que puede utilizar isFile para determinar si un elemento es un
archivo verdadero u otra cosa, como un directorio (lo puede comprobar con
isDirectory) o una conexin de nombres. Utilice toURL para convertir la va
de acceso de un archivo a un URL, renombrar archivos y otros con la clase
File.
l +-java.io.File1nputStream
Para crear un stream de entrada de archivo, utilizamos el constructor de la Y
clase FileInputStream. Aqu tiene los mtodos de lectura que debe utilizar
con esta clase:
int read(). Lee un byte de datos desde su stream de entrada y lo
devuelve.
int read(byte[] b). Lee hasta b.length bytes de datos del stream de
entrada en una matriz de bytes y devuelve el nmero ledo de bytes.
int read(byte[] b, int off,int len). Lee hasta len bytes de datos de este
stream de entrada en una matriz de bytes y devuelve el nmero ledo de
bytes.
Vamos a examinar un ejemplo. En este caso, abriremos el propio cdigo
fuente de la aplicacin, leeremos y mostraremos 50 bytes de cdigo, saltaremos 50 bytes con el mtodo skip y despus leeremos y mostraremos 50 bytesms (observe
que tambin podemos determinar cuntos bytes existen a la
espera de lectura utilizando el mtodo available, y que podemos cerrar el
stream al final del cdigo):
import java. io .*;
class fileinputstream
1:
public static void main(String args[l) throws Exception
{
int size;
PileInputStream fileinputstream = new
FileInp~tStream(~fileinputstream.java");
Systa.o~t.println(~Bytesdisponibles: " + (size =
fileinputstream.available0));
System.out.println(m~eyencio50 by te^....^);
byte bytearray [l = new byteC501;
if (fileinputstream.read(bytearray) 1= 50) C
System.~ut.println(~No se pudieron leer 50 bytesn);
1
if (fileinputitrram.read(bytearray) 1= 50) {
Syetem.out.println('No se pudieron leer 50 byteen);
>
syst-.out.println(new String(bytearray, 0, 50));
Aqu tiene la salida de este cdigo:
java f ileinputstream
Bytes disponibles: 982
Leyendo 50 bytes....
import java.io.*;
class fileinputstream
(
Ignorando 50 bytes...
Leyendo 50 bytes....
ception
{
int size;
FileIn
Eso es todo. Este ejemplo se encuentra en el archivo fileinputstream.java
del CD.
Trabajar con FileOutputStream
"Bien", dice el programador novato, "s que se utiliza FileInputStream
para leer desde archivos, pero, qu clase puedo utilizar si quiero escribir en
un archivo?" Sonremos y decimos, "Apuesto a que lo puede adivinar"
Puede utilizar la clase FileOutputStream para escribir datos, byte a byte, a
un archivo. Aqu tiene el diagrama de herencia para esa clase, que deriva de la
clase OutputStream:
Aqu tiene los mtodos de escritura que puede utilizar con esta clase:
int write(byte[] b). Escribe b.length bytes a partir de la matriz de bytes
dada a este stream de archivo de salida.
void write(byte[] b, int off, int len). Escribe len bytes a partir de la
matriz de bytes de entrada, iniciando el desplazamiento en off a este
stream de salida de archivo.
voi write(int b). Escribe el byte dado a este stream de salida de
archivo.
Aqu tiene un ejemplo en el que escribimos la cadena de texto "Esto es una
cadena de texto." a un archivo de tres formas: byte a byte, todos a la vez y en
parte. Aqu tiene la apariencia el cdigo:
import java.io.*;
class fileoutputstream
(
public static void main(String args[li throws Exception
(
byte data[] = -Esto es una cadena de texto.'.getBytes();
~ileOutputStream fileoutputstreaml = new
FileOutputStream("filel.txt");
for (int loop-index = 0; loop-indax < data-lemgth; loop-indax++) (
FileOutputStream fileoutputstread = new
FileOutputStream("file2.txt");
fileoutputstread.write(data);
FileOutputStream fileoutputstread = new
FileOutputStrram("file3.txt");
fileoutputstread.write(data, 5, 10);