Está en la página 1de 5

20

Tw ittear

21

Lectura y Escritura de Ficheros en Java


De ChuWiki

Contenido
1 Lectura de un fichero de texto en java 2 Escritura de un fichero de texto en java 3 Ficheros binarios 4 Los Buffered* 5 Acceso aleatorio a un fichero 6 Enlaces relacionados

Lectura de un fichero de texto en java


Podemos abrir un fichero de texto para leer usando la clase FileReader (http://docs.oracle.com/javase/7/docs/api/java/io/FileReader.html) . Esta clase tiene mtodos que nos permiten leer caracteres. Sin embargo, suele ser habitual querer las lneas completas, bien porque nos interesa la lnea completa, bien para poder analizarla luego y extraer campos de ella. FileReader no contiene mtodos que nos permitan leer lneas completas, pero s BufferedReader. Afortunadamente, podemos construir un BufferedReader a partir del FileReader de la siguiente forma: 1 2 3 4 5 F i l ea r c h i v o=n e wF i l e( " C : \ \ a r c h i v o . t x t " ) ; F i l e R e a d e rf r=n e wF i l e R e a d e r( a r c h i v o ) ; B u f f e r e d R e a d e rb r=n e wB u f f e r e d R e a d e r ( f r ) ; . . . S t r i n gl i n e a=b r . r e a d L i n e ( ) ;
?

La apertura del fichero y su posterior lectura pueden lanzar excepciones que debemos capturar. Por ello, la apertura del fichero y la lectura debe meterse en un bloque try-catch. Adems, el fichero hay que cerrarlo cuando terminemos con l, tanto si todo ha ido bien como si ha habido algn error en la lectura despus de haberlo abierto. Por ello, se suele poner al try-catch un bloque finally y dentro de l, el close() del fichero. El siguiente es un cdigo completo con todo lo mencionado. 1 2 3 4 5 6 7 8 9 i m p o r tj a v a . i o . * ; c l a s sL e e F i c h e r o{ p u b l i cs t a t i cv o i dm a i n ( S t r i n g[ ]a r g ){ F i l ea r c h i v o=n u l l ; F i l e R e a d e rf r=n u l l ; B u f f e r e d R e a d e rb r=n u l l ; t r y{
?

9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6

t r y{ / /A p e r t u r ad e lf i c h e r oyc r e a c i o nd eB u f f e r e d R e a d e rp a r ap o d e r / /h a c e ru n al e c t u r ac o m o d a( d i s p o n e rd e lm e t o d or e a d L i n e ( ) ) . a r c h i v o=n e wF i l e( " C : \ \ a r c h i v o . t x t " ) ; f r=n e wF i l e R e a d e r( a r c h i v o ) ; b r=n e wB u f f e r e d R e a d e r ( f r ) ; / /L e c t u r ad e lf i c h e r o S t r i n gl i n e a ; w h i l e ( ( l i n e a = b r . r e a d L i n e ( ) ) ! = n u l l ) S y s t e m . o u t . p r i n t l n ( l i n e a ) ;

} c a t c h ( E x c e p t i o ne ) { e . p r i n t S t a c k T r a c e ( ) ; } f i n a l l y { / /E ne lf i n a l l yc e r r a m o se lf i c h e r o ,p a r aa s e g u r a r n o s / /q u es ec i e r r at a n t os it o d ov ab i e nc o m os is a l t a / /u n ae x c e p c i o n . t r y { i f (n u l l! =f r) { f r . c l o s e ( ) ; } } c a t c h( E x c e p t i o ne 2 ) { e 2 . p r i n t S t a c k T r a c e ( ) ; } }

Como opcin para leer un fichero de texto lnea por lnea, podra usarse la clase Scanner en vez de el FileReader y el BufferedReader. Ver el ejemplo del Ejemplo de lectura de un fichero con Scanner

Escritura de un fichero de texto en java


El siguiente cdigo escribe un fichero de texto desde cero. Pone en l 10 lneas 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 i m p o r tj a v a . i o . * ; p u b l i cc l a s sE s c r i b e F i c h e r o { p u b l i cs t a t i cv o i dm a i n ( S t r i n g [ ]a r g s ) { F i l e W r i t e rf i c h e r o=n u l l ; P r i n t W r i t e rp w=n u l l ; t r y { f i c h e r o=n e wF i l e W r i t e r ( " c : / p r u e b a . t x t " ) ; p w=n e wP r i n t W r i t e r ( f i c h e r o ) ; f o r( i n ti=0 ;i<1 0 ;i + + ) p w . p r i n t l n ( " L i n e a"+i ) ; }c a t c h( E x c e p t i o ne ){ e . p r i n t S t a c k T r a c e ( ) ; }f i n a l l y{
?

1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0

t r y{ / /N u e v a m e n t ea p r o v e c h a m o se lf i n a l l yp a r a / /a s e g u r a r n o sq u es ec i e r r ae lf i c h e r o . i f( n u l l! =f i c h e r o ) f i c h e r o . c l o s e ( ) ; }c a t c h( E x c e p t i o ne 2 ){ e 2 . p r i n t S t a c k T r a c e ( ) ; }

Si queremos aadir al final de un fichero ya existente, simplemente debemos poner un flag a true como segundo parmetro del constructor de FileWriter.
F i l e W r i t e rf i c h e r o=n e wF i l e W r i t e r ( " c : / p r u e b a . t x t " , t r u e ) ;

Ficheros binarios
Para ficheros binarios se hace exactamente igual, pero en vez de usar los "Reader" y los "Writer", se usan los "InputStream" y los "OutputStream". En lugar de los readLine() y println(), hay que usar los mtodos read() y write() de array de bytes. El siguiente ejemplo hace una copia binaria de un fichero 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 p a c k a g ec h u i d i a n g . e j e m p l o s ; i m p o r tj a v a . i o . B u f f e r e d I n p u t S t r e a m ; i m p o r tj a v a . i o . B u f f e r e d O u t p u t S t r e a m ; i m p o r tj a v a . i o . F i l e I n p u t S t r e a m ; i m p o r tj a v a . i o . F i l e O u t p u t S t r e a m ; p u b l i cc l a s sC o p i a F i c h e r o s{ p u b l i cs t a t i cv o i dm a i n ( S t r i n g [ ]a r g s ){ c o p i a( " c : / f i c h e r o O r i g e n . b i n " ," c : / f i c h e r o D e s t i n o . b i n " ) ; }
?

p u b l i cs t a t i cv o i dc o p i a( S t r i n gf i c h e r o O r i g i n a l ,S t r i n gf i c h e r o C o p i a ) { t r y { / /S ea b r ee lf i c h e r oo r i g i n a lp a r al e c t u r a F i l e I n p u t S t r e a mf i l e I n p u t=n e wF i l e I n p u t S t r e a m ( f i c h e r o O r i g i n a l ) ; B u f f e r e d I n p u t S t r e a mb u f f e r e d I n p u t=n e wB u f f e r e d I n p u t S t r e a m ( f i l e I n p

/ /S ea b r ee lf i c h e r od o n d es eh a r l ac o p i a F i l e O u t p u t S t r e a mf i l e O u t p u t=n e wF i l e O u t p u t S t r e a m( f i c h e r o C o p i a ) ; B u f f e r e d O u t p u t S t r e a mb u f f e r e d O u t p u t=n e wB u f f e r e d O u t p u t S t r e a m ( f i l e / /B u c l ep a r al e e rd eu nf i c h e r oye s c r i b i re ne lo t r o . b y t e[ ]a r r a y=n e wb y t e [ 1 0 0 0 ] ; i n tl e i d o s=b u f f e r e d I n p u t . r e a d ( a r r a y ) ; w h i l e( l e i d o s>0 )

2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 4 2 4 3 4 4

w h i l e( l e i d o s>0 ) { b u f f e r e d O u t p u t . w r i t e ( a r r a y , 0 , l e i d o s ) ; l e i d o s = b u f f e r e d I n p u t . r e a d ( a r r a y ) ; } / /C i e r r ed el o sf i c h e r o s b u f f e r e d I n p u t . c l o s e ( ) ; b u f f e r e d O u t p u t . c l o s e ( ) ;

} c a t c h( E x c e p t i o ne ) { e . p r i n t S t a c k T r a c e ( ) ; }

Los Buffered*
Si usamos slo FileInputStream, FileOuputStream, FileReader o FileWriter, cada vez que hagamos una lectura o escritura, se har fisicamente en el disco duro. Si escribimos o leemos pocos caracteres cada vez, el proceso se hace costoso y lento, con muchos accesos a disco duro. Los BufferedReader, BufferedInputStream, BufferedWriter y BufferedOutputStream aaden un buffer intermedio. Cuando leamos o escribamos, esta clase controlar los accesos a disco. Si vamos escribiendo, se guardar los datos hasta que tenga basantes datos como para hacer la escritura eficiente. Si queremos leer, la clase leer muchos datos de golpe, aunque slo nos d los que hayamos pedido. En las siguientes lecturas nos dar lo que tiene almacenado, hasta que necesite leer otra vez. Esta forma de trabajar hace los accesos a disco ms eficientes y el programa correr ms rpido. La diferencia se notar ms cuanto mayor sea el fichero que queremos leer o escribir.

Acceso aleatorio a un fichero


La clase RandomAccessFile (http://docs.oracle.com/javase/7/docs/api/java/io/RandomAccessFile.html) de java nos permite acceder para leer o escribir directamente en cualquier posicin del fichero, sea binario o de texto.

Enlaces relacionados
Bsqueda de ficheros Ficheros XML La clase File Obtenido de http://chuwiki.chuidiang.org/index.php?title=Lectura_y_Escritura_de_Ficheros_en_Java&oldid=5033 Categora: Java:Ficheros

Esta pgina fue modificada por ltima vez el 10 ene 2014, a las 17:33.

Esta obra est bajo una licencia de Creative Commons. Para reconocer la autora debes poner http://chuwiki.chuidiang.org