Está en la página 1de 35

JAVA

MANEJO DE ARCHIVOS

Manejo de Archivos en Java ndice


1. Introduccin 2. Ficheros Creacin de un objeto File Comprobaciones y Utilidades 3. Streams de Entrada Objetos FileInputStream pertura de un FileInputStream !ectura de un FileInputStream Cierre de FileInputStream Ejemplo" #isuali$acin de un %ichero Objetos ObjectInputStream Objetos &ataInputStream pertura y cierre de &ataInputStream !ectura de un &ataInputStream Streams de entrada de U'!s pertura de un Stream de entrada (. Streams de Salida Objetos FileOutputStream pertura de un FileOutputStream Escritura en un FileOutputStream Cierre de FileOutputStream Ejemplo" lmacenamiento de In%ormacin ObjectOutputStream Streams de salida con bu%%er Creacin de Streams de salida con bu%%er #olcado y Cierre de Streams de salida con bu%%er Streams &ataOutput pertura y cierre de objetos &ataOutputStream Escritura en un objeto &ataOutputStream Contabilidad de la salida ). Ficheros de cceso leatorio Creacin de un Fichero de cceso leatorio cceso a la In%ormacin ctuali$acin de In%ormacin

1. Introduccin
Alejandro Reyes Marzano Pg 1

JAVA

MANEJO DE ARCHIVOS

El manejo de archi*os +persistencia,- es un tema %undamental en cual.uier len/uaje de pro/ramacin. 0ues nos permite interactuar con los dispositi*os de almacenamiento e1terno para poder mantener la in%ormacin en el tiempo. 2a*a no es una e1cepcin. Cuando se desarrollan applets para utili$ar en red- hay .ue tener en cuenta .ue la entrada3salida directa a %ichero es una *iolacin de se/uridad de acceso. 4uchos usuarios con%i/urar5n sus na*e/adores para permitir el acceso al sistema de %icheros- pero otros no. 0or otro lado- si se est5 desarrollando una aplicacin 2a*a para uso interno- probablemente ser5 necesario el acceso directo a %icheros. 2. Ficheros 0ara reali$ar operaciones sobre los %icheros- necesitamos contar con la in%ormacin re%erente sobre un %ichero +archi*o,. !a clase File proporciona muchas utilidades relacionadas con %icheros y con la obtencin de in%ormacin b5sica sobre esos %icheros.

Creacin de un o jeto File

0ara crear un objeto File nue*o- se puede utili$ar cual.uiera de los tres constructores si/uientes" Constructores de la clase File
child) ; public File(File parent, child) ; public File(URI uri) ;

ejemplo public File(String pathname) ; ne6 File+73carpeta3archi*o8,9 public File(String parent, String ne6 File+7carpeta8- 7archi*o8,9
String ne6 File+ne6 File+73carpeta8,- 7archi*e8,

ne6 File+ne6 U'I+str,9

El constructor utili$ado depende a menudo de otros objetos File necesarios para el acceso. 0or ejemplo- si slo se utili$a un %ichero en la aplicacin- el primer constructor es el mejor. Si en cambio- se utili$an muchos %icheros desde un mismo directorio- el se/undo o tercer constructor ser5n m5s cmodos. : si el directorio o el %ichero es una *ariable- el se/undo constructor ser5 el m5s ;til.

Co!"ro aciones # $tilidades

Una *e$ .ue se haya creado un objeto de la clase File- se puede utili$ar uno de los si/uientes m<todos para obtener in%ormacin sobre el %ichero"

Utilidad =ombres del %ichero


Alejandro Reyes Marzano

4<todos +tipo y m<todo,


String getName()

Pg 2

JAVA

MANEJO DE ARCHIVOS
String getPath() String getAbsolutePath() String getParent() boolean renameTo( File nuevoNombre ) boolean exists() boolean canWrite() boolean canRead() boolean isFile() boolean isDirectory() boolean isAbsolute() long last odi!ied() long length() boolean m"dir() String#$ list()

Comprobaciones

In%ormacin /eneral del %ichero Utilidades de directorio

#amos a desarrollar una pe.ue>a aplicacin .ue muestra in%ormacin sobre los %icheros pasados como ar/umentos en la l?nea de comandos"
im%ort &ava'io'() class *n!ormacionFichero + %ublic static void main( String args#$ ) thro,s *-.xce%tion + i!( args'length / 0 )+ !or( int i10) i 2 args'length) i33 )+ File ! 1 ne, File( args#i$ )) System'out'%rintln( 4Nombre5 43!'getName() )) System'out'%rintln( 46amino5 43!'getPath() )) i!( !'exists() )+ System'out'%rint( 4Fichero existente 4 )) System'out'%rint( (!'canRead() 7 4y se %uede 8eer4544))) System'out'%rint( (!'canWrite()74se %uese .scribir4544))) System'out'%rintln( 4'4 )) System'out'%rintln( 48a longitud del !ichero son 4 3!'length()34 bytes4 )) 9 else+ System'out'%rintln( 4.l !ichero no existe'4 )) 9 9 9 else System'out'%rintln( 4Debe indicar un !ichero'4 )) 9 9

%. &trea!s de Entrada @ay muchas clases dedicadas a la obtencin de entrada desde un %ichero. Este es el es.uema de la jerar.u?a de clases de entrada por %ichero"

Alejandro Reyes Marzano

Pg 3

JAVA

MANEJO DE ARCHIVOS

InputStream

FilterInputStream

ByteArrayInputStream

PipedInputStream

SequenceInputStream

BufferedInputStream

PushbackInputStream

ObjectInputStream

StringBufferInputStream

LineNumberInputStream

DataInputStream

FileInputStream

DataInput

ObjectInput

O jetos FileIn"ut&trea!

!a clase FileInputStream t?picamente representan %icheros de te1to accedidos en orden secuencial- byte a byte. Con FileInputStream- se puede ele/ir acceder a un byte- *arios bytes o al %ichero completo. A"ertura de un FileIn"ut&trea! 0ara abrir un FileInputStream sobre un %ichero- se le da al constructor un Strin/ o un objeto File" El ejemplo si/uiente crea dos FileInputStreams .ue est5n utili$ando el mismo archi*o de disco real. Cual.uiera de los dos constructores disponibles en esta clase puede lan$ar una File=otFoundE1ception.
*n%utStream !: 1 ne, File*n%utStream(4;archivo'txt4)) File ! 1 ne, !ile(4;archive'txt4)) *n%utStream !< 1 ne, File*n%utStream(!)) File*n%utStream !ichero1ne, File*n%utStream(4;car%eta;archive'txt4)) File !ichero 1 ne, File( 4;car%eta;archive'txt4 )) File*n%utStream !icheroSt1 ne, File*n%utStream( !ichero ))

un.ue probablemente el primer constructor es el .ue m5s se utili$a habitualmente- el se/undo permite e1aminar el archi*o m5s de cerca utili$ando sus m<todos antes de asi/narlo a un %lujo de entrada. Cuando se crea un FileInputStream- tambi<n se abre para lectura. FileInputStream sobrescribe seis de los m<todos de la clase abstracta InputStream. Si se intentan utili$ar los m<todos marA o reset en un FileInputStream se /enerar5 una IOE1ception.

Alejandro Reyes Marzano

Pg 4

JAVA

MANEJO DE ARCHIVOS

'ectura de un FileIn"ut&trea! Una *e$ abierto el FileInputStream- se puede leer de <l. El m<todo read() tiene muchas opciones"
int read())

!ee un byte y de*uel*e B1 al %inal del stream.


int read( byte b#$ ))

!lena todo el array- si es posible. &e*uel*e el n;mero de bytes le?dos o B1 si se alcan$ el %inal del stream.
int read( byte b#$=int o!!set=int longitud )) !ee lon/itud bytes en b comen$ando por b#o!!set$. &e*uel*e

el n;mero de bytes le?dos o B1 si

se alcan$ el %inal del stream. Cierre de FileIn"ut&trea! Cuando se termina con un %ichero- e1isten dos opciones para cerrarlo" e1pl?citamente- o impl?citamente cuando se recicla el objeto +el garbage collector se encar/a de ello,. 0ara cerrarlo e1pl?citamente- se utili$a el m<todo close()"
miFicheroSt'close())

Eje!"lo( Visuali)acin de un *ichero Si la con%i/uracin de la se/uridad de 2a*a permite el acceso a %icheros- se puede *er el contenido de un %ichero en un objeto 2Ce1t rea. El cdi/o si/uiente contiene los elementos necesarios para mostrar un %ichero"
File*n%utStream !is) >TextArea ta) %ublic void init() + byte b#$ 1 ne, byte#:0<?$) int i) ;; .l bu!!er de lectura se debe hacer lo su!icientemente grande ;; o es%erar a saber el tama@o del !ichero String s) try + !is 1 ne, File*n%utStream( 4;car%eta;archivo'txt4)) 9 catch( FileNotFound.xce%tion e ) + 9 try + i 1 !is'read( b )) 9 catch( *-.xce%tion e ) + 9

Alejandro Reyes Marzano

Pg 5

JAVA
s 1 ne, String( b=0 )) ta 1 ne, TextArea( s=A=?0 )) add( ta )) 9

MANEJO DE ARCHIVOS

@emos desarrollado un ejemplo- /enda.ja*a en el .ue partimos de un %ichero agenda .ue dispone de los datos .ue nosotros deseamos de nuestros ami/os- como son" nombre- tel<%ono y direccin. Si tecleamos un nombre- buscar5 en el %ichero de datos si e1iste ese nombre y presentar5 la in%ormacin .ue se haya introducido. 0ara probar- intentar .ue apare$ca la in%ormacin de 0epe.
im%ort &ava'io'() class Direccion + %rotected String nombre) %rotected String tele!ono) %rotected String direccion) Direccion( String n=String t=String d ) + nombre 1 n) tele!ono 1 t) direccion 1 d) 9 %ublic String getNombre() + return( nombre )) 9 %ublic String getTele!ono() + return( tele!ono )) 9 %ublic String getDireccion() + return( direccion )) 9 %ublic void %rint() + System'out'%rintln( nombre34Bn direccion )) 9 43tele!ono34Bn 43

class DireccionArray + %rotected Direccion lista#$) !inal int max 1 :<C) int tamano 1 0) DireccionArray() + lista 1 ne, Direccion#max$) 9 void %rintDireccion( String nombre ) +

Alejandro Reyes Marzano

Pg 6

JAVA

MANEJO DE ARCHIVOS
!or(int i10) i 2 tamano) i33 ) + i!( lista#i$'getNombre()'index-!( nombre ) D1 E: ) lista#i$'%rint()) 9 9

void addDireccion( Direccion direccion ) + i!( tamano 11 max ) System'exit( : )) lista#tamano33$ 1 direccion) 9 9 %ublic class Agenda + DireccionArray lista) File*n%utStream agFichero) !inal int long8inea 1 F<) %ublic static void main( String argv#$ ) + Agenda agenda 1 ne, Agenda()) agenda'bucle()) 9 Agenda() + lista 1 cargaDirecciones()) 9 void bucle() + String nombre) System'out'%rintln( 4*ntroduGca un nombre o 2.nter/4 )) try + ,hile( D44'eHuals( nombre 1 lee.ntrada( System'in ) ) ) + lista'%rintDireccion( nombre )) System'out'%rintln( 4*ntroduGca un nombre o 2.nter/4 )) 9 9 catch( .xce%tion e ) + 9 9 String lee.ntrada( *n%utStream entrada ) thro,s *-.xce%tion + byte chars#$ 1 ne, byte#long8inea$) int contador 1 0) ,hile( contador 2 long8inea II( chars#contador33$ (byte)entrada'read() ) D1 JBnJ ) i!( chars#contadorE:$ 11 E: ) return( null )) return( ne, String( chars=0=0=contadorE: ) )) 9 Direccion cargaDireccion() thro,s *-.xce%tion +

Alejandro Reyes Marzano

Pg

JAVA

MANEJO DE ARCHIVOS

String nombre 1 lee.ntrada( agFichero )) i!( nombre 11 null ) return( null )) String tele!ono 1 lee.ntrada( agFichero )) String direccion 1 lee.ntrada( agFichero ) 3lee.ntrada( agFichero ) 3 4Bn 4 3lee.ntrada( agFichero )) return( ne, Direccion( nombre=tele!ono=direccion ) )) 9 DireccionArray cargaDirecciones() + DireccionArray lista 1 ne, DireccionArray()) Direccion nuevaDireccion) try + agFichero 1 ne, File*n%utStream( 4agenda4 )) 9 catch( FileNotFound.xce%tion e ) + System'out'%rintln( 4No hay !ichero de Agenda4 )) return( lista )) 9 ,hile( true ) + try + nuevaDireccion 1 cargaDireccion()) i!( nuevaDireccion 11 null ) return( lista )) lista'addDireccion( nuevaDireccion )) 9 catch( .xce%tion e ) + System'out'%rintln( 4.rror cargando Agenda 4 )) System'exit( : )) 9 9 9 9

4Bn

O jetos O jectIn"ut&trea!

0ara hacer operaciones con el archi*o binario seriali$ado abierto se usa objetos de la clase ObjectInputStream- en este caso se usa para leer archi*o y se usa el m<todo readObject. Ejemplo"
%rivate A leer() thro,s *-.xce%tion= 6lassNotFound.xce%tion+ in%ut 1 ne, -b&ect*n%utStream(ne, File*n%utStream(!ila))) A ob& 1 null) i!( in%ut D1 null)+ ob& 1 (A) in%ut'read-b&ect()) 9 i! ( in%ut D1 null) in%ut'close()) return ob&) 9

O jetos +ataIn"ut&trea!

Alejandro Reyes Marzano

Pg !

JAVA

MANEJO DE ARCHIVOS

!os objetos &ataInputStream se comportan como los FileInputStream. !os streams de datos pueden leer cual.uiera de las *ariables de tipo nati*o- como floats- ints o chars. Deneralmente se utili$an &ataInputStream con %icheros binarios.
A"ertura # cierre de +ataIn"ut&trea!

0ara abrir y cerrar un objeto &ataInputStream- se utili$an los mismos m<todos .ue para FileInputStream"
Data*n%utStream miDStream) File*n%utStream miFStream) ;; -btiene un controlador de !ichero miFStream 1 ne, File*n%utStream 4;etc;e&em%lo'db!4 )) ;;.ncadena un !ichero de entrada de datos miDStream 1 ne, Data*n%utStream( miFStream )) ;; Ahora se %ueden utiliGar los dos streams de entrada %ara ;; acceder al !ichero (si se Huiere''') miFStream'read( b )) i 1 miDStream'read*nt()) ;; 6ierra el !ichero de datos ex%lKcitamente ;;Siem%re se cierra %rimero el !ichero stream de mayor nivel miDStream'close()) miFStream'close())

'ectura de un +ataIn"ut&trea! l acceder a un %ichero como &ataInputStream- se pueden utili$ar los mismos m<todos read() de los objetos FileInputStream. =o obstante- tambi<n se tiene acceso a otros m<todos dise>ados para leer cada uno de los tipos de datos"
byte readLyte() int readMnsignedLyte() short readShort() int readMnsignedShort() char read6har() int read*nt() long read8ong() !loat readFloat() double readDouble() String read8ine()

Cada m<todo leer5 un objeto del tipo pedido. 0ara el m<todo String readLine()- se marca el %inal de la cadena con En- Er- ErEn o con EOF. 0ara leer un long- por ejemplo"
long numeroSerie) numeroSerie 1 miDStream'read8ong())

Alejandro Reyes Marzano

Pg "

JAVA

MANEJO DE ARCHIVOS

&trea!s de entrada de $,'s

dem5s del acceso a %icheros- 2a*a proporciona la posibilidad de acceder a U'!s como una %orma de acceder a objetos a tra*<s de la red. Se utili$a impl?citamente un objeto U'! al acceder a sonidos e im5/enes- con el m<todo getDocumentBase() en los applets"
String imagenFich 1 ne, String( 4imagenes;%e%e'gi!4 )) imagenes#0$ 1 get*mage( getDocumentLase()=imagenFich ))

=o obstante- se puede proporcionar directamente un U'!- si se .uiere"


MR8 imagenSrc) imagenSrc 1 ne, MR8( 4htt%5;;enter%rise'com;Nin!o4 )) imagenes#0$ 1 get*mage( imagenSrc=4imagenes;%e%e'gi!4 ))

A"ertura de un &trea! de entrada Cambi<n se puede abrir un stream de entrada a partir de un U'!. 0or ejemplo- se puede utili$ar un %ichero de datos para un applet"
*m%utStream is) byte bu!!er#$ 1 ne, byte#<?$) is 1 ne, MR8( getDocumentLase()=datos)'o%enStream())

hora se puede utili$ar is para leer in%ormacin de la misma %orma .ue se hace con un objeto FileInputStream"
is'read( bu!!er=0=bu!!er'length ))

-. &trea!s de &alida !a contrapartida necesaria de la lectura de datos es la escritura de datos. Como con los Streams de entrada- las clases de salida est5n ordenadas jer5r.uicamente"

Alejandro Reyes Marzano

Pg 1#

JAVA

MANEJO DE ARCHIVOS

OutputStream

ByteArrayOutputStream

FileOutputStream

FilterOutputStream

PipedOutputStream

ObjectOutputStream

BufferedOutputStream

PrintStream

DataOutputStream

ObjectOutput

DataOutput

and!mAccessFile

E1aminaremos las clases FileOut"ut&trea! y +ataOut"ut&trea! para complementar los streams de entrada .ue se han *isto.

O jetos FileOut"ut&trea!

!os objetos FileOutputStream son ;tiles para la escritura de %icheros de te1to. Como con los %icheros de entrada- primero se necesita abrir el %ichero para lue/o escribir en <l. A"ertura de un FileOut"ut&trea! 0ara abrir un objeto FileOutputStream- se tienen las mismas posibilidades .ue para abrir un %ichero stream de entrada. Se le da al constructor un Strin/ o un objeto File.
File-ut%utStream miFicheroSt) miFicheroSt 1 ne, File-ut%utStream( 4;etc;""4 ))

Como con los streams de entrada- tambi<n se puede utili$ar"


File miFichero File-ut%utStream miFicheroSt) miFichero 1 ne, File( 4;etc;""4 )) miFicheroSt 1 ne, File-ut%utStream( miFichero ))

Alejandro Reyes Marzano

Pg 11

JAVA

MANEJO DE ARCHIVOS

Escritura en un FileOut"ut&trea! Una *e$ abierto el %ichero- se pueden escribir bytes de datos utili$ando el m<todo write(). Como con el m<todo read() de los streams de entrada- tenemos tres posibilidades"
void ,rite( int b )) .scribe un byte' void ,rite( byte b#$ )) .scribe todo el array= si es %osible' void ,rite( byte b#$=int o!!set=int longitud )) .scribe longitud bytes en b comenGando %or b#o!!set$'

Cierre de FileOut"ut&trea! Cerrar un stream de salida es similar a cerrar streams de entrada. Se puede utili$ar el m<todo e1pl?cito"
miFicheroSt'close())

O- se puede dejar .ue el sistema cierre el %ichero cuando se recicle miFicheroSt. Eje!"lo( Al!acena!iento de In*or!acin Este pro/rama- pre/unta al usuario una lista de nombres y n;meros de tel<%ono. Cada nombre y n;mero se a>ade a un %ichero situado en una locali$acin %ija. 0ara indicar .ue se ha introducido toda la lista- el usuario especi%ica FFinF ante la solicitud de entrada del nombre. Una *e$ .ue el usuario ha terminado de teclear la lista- el pro/rama crear5 un %ichero de salida .ue se mostrar5 en pantalla o se imprimir5. 0or ejemplo"
?OA:<F=>uanito AP?COC=8uisa :<F?AP=Pe%e F?OPQC=Antonio FA?OP<= aria

El cdi/o %uente del pro/rama es el si/uiente"


im%ort &ava'io'() class Tele!onos + static File-ut%utStream !os) %ublic static !inal int long8inea 1 C:) %ublic static void main( String args#$ ) thro,s *-.xce%tion + byte t!no#$ 1 ne, byte#long8inea$) byte nombre#$ 1 ne, byte#long8inea$) !os 1 ne, File-ut%utStream( 4tele!ono'dat4 )) ,hile( true ) + System'err'%rintln( 4Teclee un nombre (JFinJ termina)4 )) lee8inea( nombre )) i!( 4!in4'eHuals*gnore6ase( ne, String( nombre=0=0=F ) ) )

Alejandro Reyes Marzano

Pg 12

JAVA

MANEJO DE ARCHIVOS
brea") System'err'%rintln( 4Teclee el numero de tele!ono4 )) lee8inea( t!no )) !or( int i10) t!no#i$ D1 0) i33 ) !os',rite( t!no#i$ )) !os',rite( J=J )) !or( int i10) nombre#i$ D1 0) i33 ) !os',rite( nombre#i$ )) !os',rite( JBnJ )) 9 !os'close()) 9 %rivate static void lee8inea( byte linea#$ ) thro,s *-.xce%tion + int b 1 0) int i 1 0) ,hile( (i 2 ( long8ineaE:) ) II ( ( b 1 System'in'read() ) D1 JBnJ ) ) linea#i33$ 1 (byte)b) linea#i$ 1 (byte)0) 9

O jetos O jectOut"ut&trea!

!os objetos de la clase ObjectOutputStream nos permite escribir en el archi*o- ose proporciona un %lujo de comunicacin con los dispositi*os de almacenamiento. Ejemplo"
File !ila1ne, File(RmiArchivo'binS)) File-ut%utStream !os1ne, File-ut%utStream(!ila)) -b&ect-ut%utStream out1ne, -b&ect-ut%utStream(!os))

!ue/o se escribe con el metodo 6riteObject+objeto,- de la clase ObjectOutputStream.


i! (out D1 null) out',rite-b&ect(ob&)) i! ( out D1 null) out'close())

&trea!s de salida con u**er

Si se trabaja con /ran cantidad de datos- o se escriben muchos elementos pe.ue>os- ser5 una buena idea utili$ar un stream de salida con bu%%er. !os streams con bu%%er o%recen los mismos m<todos de la clase FileOut"ut&trea!- pero toda salida se almacena en un bu%%er. Cuando se llena el bu%%er- se en*?a a disco con una ;nica operacin de escritura9 o- en caso necesario- se puede en*iar el bu%%er a disco en cual.uier momento. Creacin de &trea!s de salida con u**er 0ara crear un stream Gu%%eredOutput- primero se necesita un stream FileOutput normal9 entonces se le a>ade un bu%%er al stream"
Alejandro Reyes Marzano Pg 13

JAVA

MANEJO DE ARCHIVOS

File-ut%utStream miFileStream) Lu!!erd-ut%urStream miLu!!erStream) ;; -btiene un controlador de !ichero miFileStream 1 ne, File-ut%utStream( 4;tm%;""4 )) ;; .ncadena un stream de salida con bu!!er miLu!!erStream 1 ne, Lu!!ered-ut%utStream( miFileStream ))

Volcado # Cierre de &trea!s de salida con u**er l contrario .ue los streams FileOutput- cada escritura al bu%%er no se corresponde con una escritura en disco. menos .ue se llene el bu%%er antes de .ue termine el pro/rama- cuando se .uiera *olcar el bu%%er e1pl?citamente se debe hacer mediante una llamada a flush()"
;; Se !uerGa el volcado del bu!!er a disco miLu!!erStream'!lush()) ;; 6erramos el !ichero de datos' Siem%re se ha de cerrar %rimero el ;; !ichero stream de mayor nivel miLu!!erStream'close()) miFileStream'close())

&trea!s +ataOut"ut

2a*a tambi<n implementa una clase de salida complementaria a la clase +ataIn"ut&trea!. Con la clase &ataOutputStream- se pueden escribir datos binarios en un %ichero. A"ertura # cierre de o jetos +ataOut"ut&trea! 0ara abrir y cerrar objetos &ataOutputStream- se utili$an los mismos m<todos .ue para los objetos FileOutputStream"
Data-ut%utStream miDataStream) File-ut%utStream miFileStream) Lu!!ered-ut%utStream miLu!!erStream) ;; -btiene un controlador de !ichero miFileStream 1 ne, File-ut%utStream( 4;tm%;""4 )) ;; .ncadena un stream de salida con bu!!er (%or e!iciencia) miLu!!erStream 1 ne, Lu!!ered-ut%utStream( miFileStream )) ;; .ncadena un !ichero de salida de datos miDataStream 1 ne, Data-ut%utStream( miLu!!erStream )) ;; Ahora se %ueden utiliGar los dos streams de entrada %ara ;; acceder al !ichero (si se Huiere) miLu!!erStream',rite( b )) miDataStream',rite*nt( i )) ;; 6ierra el !ichero de datos ex%lKcitamente' Siem%re se cierra ;; %rimero el !ichero stream de mayor nivel miDataStream'close()) miLu!!erStream'close()) miFileStream'close())

Alejandro Reyes Marzano

Pg 14

JAVA

MANEJO DE ARCHIVOS

Escritura en un o jeto +ataOut"ut&trea! Cada uno de los m<todos write() accesibles por los FileOutputStream tambi<n lo son a tra*<s de los &ataOutputStream. Cambi<n encontrar5 m<todos complementarios a los de &ataInputStream"
void void void void void void void void void ,riteLoolean( boolean b )) ,riteLyte( int i )) ,riteShort( int i )) ,rite6har( int i )) ,rite*nt( int i )) ,riteFloat( !loat ! )) ,riteDouble( double d )) ,riteLytes( String s )) ,rite6hars( string s ))

0ara las cadenas- se tienen dos posibilidades" bytes y caracteres. @ay .ue recordar .ue los bytes son objetos de H bits y los caracteres lo son de 1I bits. Si nuestras cadenas utili$an caracteres Unicode- debemos escribirlas con writeChars(). Conta ilidad de la salida Otra %uncin necesaria durante la salida es el m<todo size(). Este m<todo simplemente de*uel*e el n;mero total de bytes escritos en el %ichero. Se puede utili$ar size() para ajustar el tama>o de un %ichero a m;ltiplo de cuatro. 0or ejemplo- de la %orma si/uiente"
int numLytes 1 miDataStream'siGe() T ?) !or( int i10) i 2 numLytes) i33 ) miDataStream',rite( 0 ))

.. Ficheros de Acceso Aleatorio menudo- no se desea leer un %ichero de principio a %in9 sino acceder al %ichero como una base de datos- donde se salta de un re/istro a otro9 cada uno en di%erentes partes del %ichero. 2a*a proporciona una clase ,ando!AccessFile para este tipo de entrada3salida.

Creacin de un Fichero de Acceso Aleatorio

@ay dos posibilidades para abrir un %ichero de acceso aleatorio" Con el nombre del %ichero"
miRAFile 1 ne, RandomAccessFile( String nombre=String modo ))

Con un objeto File"


miRAFile 1 ne, RandomAccessFile( File !ichero= String modo ))

El ar/umento modo determina si se tiene acceso de slo lectura +r, o de lectura3escritura +r;,,. 0or ejemplo- se puede abrir un %ichero de una base de datos para actuali$acin"
Alejandro Reyes Marzano Pg 15

JAVA

MANEJO DE ARCHIVOS

RandomAccessFile miRAFile) miRAFile 1 ne, RandomAccessFile( 4;tm%;""'db!4=4r,4 ))

Acceso a la In*or!acin

!os objetos 'andom ccessFile esperan in%ormacin de lectura3escritura de la misma manera .ue los objetos &ataInput3&ataOutput. Se tiene acceso a todas las operaciones read() y write() de las clases +ataIn"ut&trea! y +ataOut"ut&trea!. Cambi<n se tienen muchos m<todos para mo*erse dentro de un %ichero"
long getFilePointer())

&e*uel*e la posicin actual del puntero del %ichero


void see"( long %os ))

Coloca el puntero del %ichero en una posicin determinada. !a posicin se da como un despla$amiento en bytes desde el comien$o del %ichero. !a posicin J marca el comien$o de ese %ichero.
long length())

&e*uel*e la lon/itud del %ichero. !a posicin length() marca el %inal de ese %ichero. Actuali)acin de In*or!acin Se pueden utili$ar %icheros de acceso aleatorio para a>adir in%ormacin a %icheros e1istentes"
miRAFile 1 ne, RandomAccessFile( 4;tm%;""'log4=4r,4 )) miRAFile'see"( miRAFile'length() )) ;; 6ualHuier ,rite() Hue hagamos a %artir de este %unto del cUdigo ;; a@adirV in!ormaciUn al !ichero

#amos a *er un pe.ue>o ejemplo- !o/.ja*a- .ue a>ade una cadena a un %ichero e1istente"
class 8og + %ublic static void main( String args#$ ) thro,s *-.xce%tion + RandomAccessFile miRAFile) String s 1 4*n!ormacion a incor%orarBnTutorial de >avaBn4) ;; Abrimos el !ichero de acceso aleatorio miRAFile 1 ne, RandomAccessFile( 4;tm%;&ava'log4=4r,4 )) ;; Nos vamos al !inal del !ichero miRAFile'see"( miRAFile'length() )) ;; *ncor%oramos la cadena al !ichero miRAFile',riteLytes( s )) ;; 6erramos el !ichero miRAFile'close()) 9 9

Alejandro Reyes Marzano

Pg 16

JAVA

MANEJO DE ARCHIVOS

Ejemplo J1. Crear una aplicacin usando archi*os seriali$ados con las opciones de nue*o archi*o- /uardar archi*o- /uardar como- abrir- salir- etc. Crearemos una aplicacin sencilla para poder entender mejor el uso de las clases .ue nos permite el manejo de archi*os- para ello de%inimos una clase llamado rchi*o.ja*a .ue nos permite manipular los archi*os. Esta clase es una plantilla .ue nos permite manejar cual.uier tipo de objetos seriali$ados
;( Name5 Author5 Descri%tion5 Date5 6o%yright5 ArchivoW A8.>ANDR- R.X.S ARYANes una clase Hue nos %ermite mane&ar archivos serialiGados de cualHuier ob&eto' es una %lantilla <0;0P;0Q :A5:O Z<00CE<00Q alemso!t cor%

(; %ac"age datos) im%ort &ava'io'() %ublic class Archivo 2A/+ ;((!ile sirve %ara enca%sular la interaccion de nuestros %rogramas con el sistema ( de archivos' ediante la clase File no nos limitamos a leer el contenido de un ( archivo= ademas %odemos obtener toda la in!ormacion del archivo nombre=!echa etc ((; %rivate File !ila) ;((8a clase *n%utStream nos sirve %ara leer datos del cliente(; %rivate -b&ect*n%utStream in%ut) ;((es un ob&eto Hue nos %ermite escribir en el archivo(; %rivate -b&ect-ut%utStream out%ut) ;((construye un archivo con el ob&eto !ile en la Hue se enca%sula el archivo con ( todas las %ro%iedades nombre= !echa= etc(; %ublic Archivo(File !ila) + this'!ila1!ila) 9 %rivate void escribir(A ob&) thro,s *-.xce%tion+ out%ut 1 ne, -b&ect-ut%utStream(ne, File-ut%utStream(!ila))) i! (out%ut D1 null) out%ut',rite-b&ect(ob&)) i! ( out%ut D1 null) out%ut'close()) 9 %rivate A leer() thro,s *-.xce%tion= 6lassNotFound.xce%tion+ in%ut 1 ne, -b&ect*n%utStream(ne, File*n%utStream(!ila))) A ob& 1 null) i!( in%ut D1 null)+ ob& 1 (A) in%ut'read-b&ect())

Alejandro Reyes Marzano

Pg 1

JAVA
9 i! ( in%ut D1 null) in%ut'close()) return ob&)

MANEJO DE ARCHIVOS

%ublic boolean salvar(A ob&etos)+ try+ i!(D!ila'exists()) !ila'createNe,File()) escribir(ob&etos)) return true) 9 catch(&ava'io'*-.xce%tion exce%cion)+ &avax's,ing'>-%tionPane'sho, essageDialog(null= 4.rror de archivo inexistenteBn43exce%cion'get essage())) return !alse) 9 9 %ublic A recu%erar()+ A aux1null) try+ aux1leer()) return aux) 9 catch(&ava'io'.-F.xce%tion eo!)+ return aux) 9 catch(&ava'io'*-.xce%tion ex)+ &avax's,ing'>-%tionPane'sho, essageDialog(null= 4.rror en la lectura de archivoBn43ex'get essage())) return aux) 9 catch (6lassNotFound.xce%tion !) + &avax's,ing'>-%tionPane'sho, essageDialog(null= 4Archivo inexistente4 3 !'get essage())) return aux) 9 9 9

.u? crearemos la clase 0ersona.ja*a- una clase seriali$ado con sus respecti*os atributos y m<todos. Es una clase sencilla pues a.u? se trata de e1plicar el uso de archi*os- ya el lector puede implementar clases mas so%isticadas de acuerdo a sus necesidades

;( Name5 Author5 Descri%tion5 Date5 PersonaW A8.>ANDR- R.X.S ARYANes una clase Hue usaremos %ara nuestra a%licacion <0;0P;0Q :A5:O

Alejandro Reyes Marzano

Pg 1!

JAVA
6o%yright5 (; %ac"age datos) %ublic class Persona im%lements &ava'io'SerialiGable+ %rivate String nombre) %rivate String a%ellidos) %rivate String dni) %rivate int edad) Z<00CE<00Q alemso!t cor%

MANEJO DE ARCHIVOS

;(( ([construye un ob&eto %ersona y establece los valores nulos (a los %arametros corres%ondientes(; %ublic Persona() + 9 ;(( ([construye un ob&eto %ersona y establece los atributos con los ( datos %asados como %arametro (; %ublic Persona(String nombre= String a%ellidos= String dni= int edad) + this'nombre 1 nombre) this'a%ellidos 1 a%ellidos) this'dni 1 dni) this'edad 1 edad) 9 ;(( ( [returna el nombre (; %ublic String getNombre() + return nombre) 9 ;(( ( [asigna el nombre (; %ublic void setNombre(String nombre) + this'nombre 1 nombre) 9 ;(( ( [returna las a%ellidos (; %ublic String getA%ellidos() + return a%ellidos) 9 ;(( ( [asigna los a%ellidos (; %ublic void setA%ellidos(String a%ellidos) + this'a%ellidos 1 a%ellidos) 9 ;((

Alejandro Reyes Marzano

Pg 1"

JAVA
( [returna el dni (; %ublic String getDni() + return dni) 9 ;(( ( [asigna el dni (; %ublic void setDni(String dni) + this'dni 1 dni) 9 ;(( ( [returna la edad (; %ublic int get.dad() + return edad) 9 ;(( ( [asigna la edad (; %ublic void set.dad(int edad) + this'edad 1 edad) 9

MANEJO DE ARCHIVOS

Clase 0ersonas.ja*a- es una clase .ue encapsula un objeto de la clase @ash4ap .ue nos permite manejar como una estructura donde se almacenaran las personas re/istradas. El lector puede implementar mas m<todos como m<todos de b;s.ueda y otros.
;( Name5 Author5 Descri%tion5 Date5 6o%yright5 PersonasW A8.>ANDR- R.X.S ARYANes una estructura de ob&etos <0;0P;0Q :A5:O Z<00CE<00Q alemso!t cor%

(; %ac"age datos) %ublic class Personas im%lements &ava'io'SerialiGable+ %rivate &ava'util'\ash a%2String =Persona/ %ersonas) %ublic Personas() + %ersonas 1ne, &ava'util'\ash a%2String =Persona/()) 9 ;(( (metodo Hue nos %ermite insertar un ob&eto %ersona a la lista de %ersonas' (recibe como %arametro un ob&eto %ersona y luego obtiene el dni como identi!icador (con ese identi!icador busca en la lista si ya se encuentra o no el ob&eto

Alejandro Reyes Marzano

Pg 2#

JAVA

MANEJO DE ARCHIVOS

(si lo encuentra retorna el ob&eto encontrado con ese identi!icador= si no encuentra (retorna null' .l valor se asigna en la variable aux= si es null se inserta en otro (caso no se inserta' %ara saber si inserto o se usa un boolean y se retorna ese valor(; %ublic boolean adicionarPersona(Persona %ersona)+ boolean insertado1!alse) Persona aux1getPersonas()'get(%ersona'getDni())) i!(aux11null)+ getPersonas()'%ut(%ersona'getDni()= %ersona)) insertado1true) 9 return insertado) 9 ;(( ( [returna la lista %ersonas (; %ublic &ava'util'\ash a%2String= Persona/ getPersonas() + return %ersonas) 9 ;(( ( [establece la lista %ersonas con el %arametro %asado (; %ublic void setPersonas(&ava'util'\ash a%2String= Persona/ %ersonas) + this'%ersonas 1 %ersonas) 9 %ublic void guardar(&ava'io'File !ile)+ Archivo archivo 1ne, Archivo(!ile)) archivo'salvar(%ersonas)) 9 %ublic void cargar(&ava'io'File !ile)+ Archivo archivo 1ne, Archivo(!ile)) %ersonas1(&ava'util'\ash a%2String =Persona/)archivo'recu%erar()) 9 9

!a clase Frame rchi*o.ja*a es la clase principal donde se muestra la aplicacin

;(

Name5 Author5 Descri%tion5 Date5 6o%yright5

FrameArchivoW A8.>ANDR- R.X.S ARYANes la clase %rinci%al <0;0P;0Q :A5:O Z<00CE<00Q alemso!t cor%

(; %ac"age ventanas)

Alejandro Reyes Marzano

Pg 21

JAVA
im%ort datos'() im%ort &avax's,ing'() im%ort &ava'io'() %ublic class FrameArchivo extends &avax's,ing'>Frame + Personas %ersonas1ne, Personas()) %rivate >File6hooser &File6hooser-%eraciones) %rivate boolean dirty1!alse) %rivate String currFileName1null) %rivate Archivo archivo)

MANEJO DE ARCHIVOS

%ublic FrameArchivo() + su%er(4'5 ane&o de Archivos5'4)) init6om%onents()) &File6hooser-%eraciones 1 ne, >File6hooser()) this'& enu*temNuevo'addAction8istener(ne, Nuevo(this))) this'& enu*tem]uardar6'addAction8istener(ne, ]uardarArchivo(this))) this'& enu*temAbrir'addAction8istener(ne, AbrirArchivo(this))) this'& enu*temSalir'addAction8istener(ne, Salir(this))) this'& enu*tem]uardar'addAction8istener(ne, ]uardar(this))) 9 [Su%%ressWarnings(4unchec"ed4) %rivate void init6om%onents() + &Panel: 1 ne, &avax's,ing'>Panel()) &8abel: 1 ne, &avax's,ing'>8abel()) &TextFieldN-mbre 1 ne, &avax's,ing'>TextField()) &8abel< 1 ne, &avax's,ing'>8abel()) &TextFieldA%ellidos 1 ne, &avax's,ing'>TextField()) &8abelF 1 ne, &avax's,ing'>8abel()) &TextFieldDni 1 ne, &avax's,ing'>TextField()) &8abel? 1 ne, &avax's,ing'>8abel()) &TextField.dad 1 ne, &avax's,ing'>TextField()) &ScrollPane: 1 ne, &avax's,ing'>ScrollPane()) &TextArea ostrar 1 ne, &avax's,ing'>TextArea()) &LuttonAgregar 1 ne, &avax's,ing'>Lutton()) &Lutton ostrar 1 ne, &avax's,ing'>Lutton()) & enuLar: 1 ne, &avax's,ing'> enuLar()) & enu: 1 ne, &avax's,ing'> enu()) & enu*temNuevo 1 ne, &avax's,ing'> enu*tem()) & enu*temAbrir 1 ne, &avax's,ing'> enu*tem()) & enu*tem]uardar 1 ne, &avax's,ing'> enu*tem()) & enu*tem]uardar6 1 ne, &avax's,ing'> enu*tem()) &Se%arator: 1 ne, &avax's,ing'>Se%arator()) & enu*temSalir 1 ne, &avax's,ing'> enu*tem()) & enu< 1 ne, &avax's,ing'> enu()) setDe!ault6lose-%eration(&avax's,ing'Windo,6onstants'.^*T_-N_68-S.)) &Panel:'set8ayout(ne, &ava'a,t']rid8ayout(?= <= A= A))) &8abel:'setText(4Nombre4)) &Panel:'add(&8abel:)) &Panel:'add(&TextFieldN-mbre)) &8abel<'setText(4A%ellidos4))

Alejandro Reyes Marzano

Pg 22

JAVA
&Panel:'add(&8abel<)) &Panel:'add(&TextFieldA%ellidos)) &8abelF'setText(4Dni4)) &Panel:'add(&8abelF)) &Panel:'add(&TextFieldDni)) &8abel?'setText(4.dad4)) &Panel:'add(&8abel?)) &Panel:'add(&TextField.dad)) &TextArea ostrar'set6olumns(<0)) &TextArea ostrar'setRo,s(A)) &ScrollPane:'set`ie,%ort`ie,(&TextArea ostrar))

MANEJO DE ARCHIVOS

&LuttonAgregar'setText(4Agregar4)) &LuttonAgregar'addAction8istener(ne, &ava'a,t'event'Action8istener() + %ublic void actionPer!ormed(&ava'a,t'event'Action.vent evt) + &LuttonAgregarActionPer!ormed(evt)) 9 9)) &Lutton ostrar'setText(4 ostrar4)) &Lutton ostrar'addAction8istener(ne, &ava'a,t'event'Action8istener() + %ublic void actionPer!ormed(&ava'a,t'event'Action.vent evt) + &Lutton ostrarActionPer!ormed(evt)) 9 9)) & enu:'setText(4Archivo4)) & enu*temNuevo'setAccelerator(&avax's,ing'aeyStro"e'getaeyStro"e(&ava' a,t'event'aey.vent'`a_N= &ava'a,t'event'*n%ut.vent'6TR8_ ASa))) & enu*temNuevo'setText(4Nuevo 8ista4)) & enu:'add(& enu*temNuevo)) & enu*temAbrir'setAccelerator(&avax's,ing'aeyStro"e'getaeyStro"e(&ava' a,t'event'aey.vent'`a_A= &ava'a,t'event'*n%ut.vent'6TR8_ ASa))) & enu*temAbrir'setText(4Abrir4)) & enu:'add(& enu*temAbrir)) & enu*tem]uardar'setAccelerator(&avax's,ing'aeyStro"e'getaeyStro"e(&av a'a,t'event'aey.vent'`a_]= &ava'a,t'event'*n%ut.vent'6TR8_ ASa))) & enu*tem]uardar'setText(4]uardar4)) & enu:'add(& enu*tem]uardar)) & enu*tem]uardar6'setAccelerator(&avax's,ing'aeyStro"e'getaeyStro"e(&a va'a,t'event'aey.vent'`a_6= &ava'a,t'event'*n%ut.vent'6TR8_ ASa))) & enu*tem]uardar6'setText(4]uardar 6omo '''4)) & enu:'add(& enu*tem]uardar6)) & enu:'add(&Se%arator:)) & enu*temSalir'setText(4Salir4)) & enu:'add(& enu*temSalir)) & enuLar:'add(& enu:))

Alejandro Reyes Marzano

Pg 23

JAVA

MANEJO DE ARCHIVOS

& enu<'setText(4-tros4)) & enuLar:'add(& enu<)) set> enuLar(& enuLar:)) &avax's,ing']rou%8ayout layout 1 ne, &avax's,ing']rou%8ayout(get6ontentPane())) get6ontentPane()'set8ayout(layout)) layout'set\oriGontal]rou%( layout'createParallel]rou%(&avax's,ing']rou%8ayout'Alignment'8.AD* N]) 'add]rou%(layout'createSeHuential]rou%() 'add]rou%(layout'createParallel]rou%(&avax's,ing']rou%8ayout'A lignment'8.AD*N]) 'add]rou%(layout'createSeHuential]rou%() 'add6ontainer]a%() 'add6om%onent(&Panel:= &avax's,ing']rou%8ayout'PR.F.RR.D_S*Y.= <<P= &avax's,ing']rou%8ayout'PR.F.RR.D_S*Y.) 'add]a%(PO= PO= PO) 'add]rou%(layout'createParallel]rou%(&avax's,ing']rou% 8ayout'Alignment'8.AD*N]) 'add6om%onent(&Lutton ostrar) 'add6om%onent(&LuttonAgregar))) 'add]rou%(layout'createSeHuential]rou%() 'add]a%(FP= FP= FP) 'add6om%onent(&ScrollPane:= &avax's,ing']rou%8ayout'PR.F.RR.D_S*Y.= FOQ= &avax's,ing']rou%8ayout'PR.F.RR.D_S*Y.))) 'add6ontainer]a%(?:= Short' A^_`A8M.)) )) layout'set`ertical]rou%( layout'createParallel]rou%(&avax's,ing']rou%8ayout'Alignment'8.AD* N]) 'add]rou%(layout'createSeHuential]rou%() 'add6ontainer]a%() 'add]rou%(layout'createParallel]rou%(&avax's,ing']rou%8ayout'A lignment'8.AD*N]) 'add6om%onent(&Panel:= &avax's,ing']rou%8ayout'PR.F.RR.D_S*Y.= :0O= &avax's,ing']rou%8ayout'PR.F.RR.D_S*Y.) 'add]rou%(layout'createSeHuential]rou%() 'add6om%onent(&LuttonAgregar) 'add]a%(:C= :C= :C) 'add6om%onent(&Lutton ostrar))) 'add]a%(FF= FF= FF) 'add6om%onent(&ScrollPane:= &avax's,ing']rou%8ayout'PR.F.RR.D_S*Y.= <0A= &avax's,ing']rou%8ayout'PR.F.RR.D_S*Y.) 'add6ontainer]a%(&avax's,ing']rou%8ayout'D.FAM8T_S*Y.= Short' A^_`A8M.)) )) %ac"()) 9

Alejandro Reyes Marzano

Pg 24

JAVA

MANEJO DE ARCHIVOS

%rivate void &LuttonAgregarActionPer!ormed(&ava'a,t'event'Action.vent evt)

boolean !1!alse) i!(this'verString(this'datos()'getDni())) !1%ersonas'adicionarPersona(this'datos())) this'reset()) i!(D!)+ &avax's,ing'>-%tionPane'sho, essageDialog(this=4ya se encuentra registrado4)) 9 9 + %rivate void &Lutton ostrarActionPer!ormed(&ava'a,t'event'Action.vent evt) 9 this'mostrar())

%ublic static void main(String args#$) + &ava'a,t'.ventbueue'invo"e8ater(ne, Runnable() + %ublic void run() + ne, FrameArchivo()'set`isible(true)) 9 9)) 9 %rivate Persona datos()+ Persona %1ne, Persona()) String nombre1this'&TextFieldN-mbre'getText()) String a%ellidos1this'&TextFieldA%ellidos'getText()) String dni1this'&TextFieldDni'getText()) int edad1*nteger'%arse*nt(this'&TextField.dad'getText())) %'setA%ellidos(a%ellidos)) %'setDni(dni)) %'setNombre(nombre)) %'set.dad(edad)) return %) 9 %rivate boolean verString(String s)+ i!(D(s11null)) return true) return !alse) 9 %rivate void mostrar()+ String s14BnBt8ista de PersonasBn4) &ava'util'6ollection co1%ersonas'getPersonas()'values()) !or(-b&ect ob5 co)+ s31((Persona)ob)'getDni()34Bt43((Persona)ob)'getNombre()34Bt43 ((Persona)ob)'getA%ellidos()34BtBt43((Persona)ob)'get.dad()34Bn4) 9 this'&TextArea ostrar'setText(s)) 9 %rivate void reset()+

Alejandro Reyes Marzano

Pg 25

JAVA
this'&TextFieldA%ellidos'setText(44)) this'&TextFieldDni'setText(44)) this'&TextField.dad'setText(44)) this'&TextFieldN-mbre'setText(44)) this'&TextFieldN-mbre'reHuestFocus()) 9 %rivate %rivate %rivate %rivate %rivate %rivate %rivate %rivate %rivate %rivate %rivate %rivate %rivate %rivate %rivate %rivate %rivate %rivate %rivate %rivate %rivate %rivate &avax's,ing'>Lutton &LuttonAgregar) &avax's,ing'>Lutton &Lutton ostrar) &avax's,ing'>8abel &8abel:) &avax's,ing'>8abel &8abel<) &avax's,ing'>8abel &8abelF) &avax's,ing'>8abel &8abel?) &avax's,ing'> enu & enu:) &avax's,ing'> enu & enu<) &avax's,ing'> enuLar & enuLar:) &avax's,ing'> enu*tem & enu*temAbrir) &avax's,ing'> enu*tem & enu*tem]uardar) &avax's,ing'> enu*tem & enu*tem]uardar6) &avax's,ing'> enu*tem & enu*temNuevo) &avax's,ing'> enu*tem & enu*temSalir) &avax's,ing'>Panel &Panel:) &avax's,ing'>ScrollPane &ScrollPane:) &avax's,ing'>Se%arator &Se%arator:) &avax's,ing'>TextArea &TextArea ostrar) &avax's,ing'>TextField &TextFieldA%ellidos) &avax's,ing'>TextField &TextFieldDni) &avax's,ing'>TextField &TextField.dad) &avax's,ing'>TextField &TextFieldN-mbre)

MANEJO DE ARCHIVOS

%ublic boolean saveAsFile() + this're%aint()) i! (>File6hooser'APPR-`._-PT*-N 11&File6hooser-%eraciones'sho,SaveDialog(this)) + currFileName 1 &File6hooser-%eraciones'getSelectedFile()'getPath()) this're%aint()) return saveFile()) 9 else + this're%aint()) return !alse) 9 9 ;;%ara mane&o de archivos %ublic boolean saveFile() + i!(currFileName 11 null) return saveAsFile()) try + File !ile 1 ne, File (currFileName)) this'%ersonas'guardar(!ile)) this'dirty 1 !alse) tituloA%licacion()) return true) 9

Alejandro Reyes Marzano

Pg 26

JAVA
catch(.xce%tion ex)+ ex'%rintStac"Trace()) 9 return !alse)

MANEJO DE ARCHIVOS

%ublic boolean cerrarA%licacion() + i!(Ddirty) return true) int value1 >-%tionPane'sho,6on!irmDialog(this= 4Desea cambios 74=4`entanita4= >-%tionPane'X.S_N-_6AN6.8_-PT*-N) ) s,itch(value) + case >-%tionPane'X.S_-PT*-N5 return saveFile()) case >-%tionPane'N-_-PT*-N5 return true) case >-%tionPane'6AN6.8_-PT*-N5 de!ault5 return !alse) 9 9 %ublic void tituloA%licacion() + String ca%tion) i! (currFileName 11 null) + ca%tion 1 48ista contactos 0:4) 9 else + ca%tion 1 currFileName) 9 i!(dirty) + ca%tion 1 4(4 3 ca%tion) 9 ca%tion 1 4contactos E 4 3 ca%tion) this'setTitle(ca%tion)) 9 %ublic void nuevo(&ava'a,t'event'Action.vent e) + i!(cerrarA%licacion()) + %ersonas1 ne, Personas()) currFileName 1 null) dirty 1 !alse) tituloA%licacion()) this'&TextArea ostrar'setText(44)) 9 9 void abrir(String !ila) + try + File !ile 1 ne, File(!ila)) this'%ersonas'cargar(!ile)) this'currFileName 1 !ila) this'dirty 1 !alse) tituloA%licacion()) 9 catch(.xce%tion ex)+

]uardar

los

Alejandro Reyes Marzano

Pg 2

JAVA
ex'%rintStac"Trace()) 9 9

MANEJO DE ARCHIVOS

%ublic void abrirArchivo() + i! (DcerrarA%licacion()) return) i! (>File6hooser'APPR-`._-PT*-N &File6hooser-%eraciones'sho,-%enDialog(this)) + abrir(&File6hooser-%eraciones'getSelectedFile()'getPath())) 9 this're%aint()) 9 %ublic void abre(&ava'a,t'event'Action.vent e) + abrirArchivo()) 9 %ublic void salvar6omo(&ava'a,t'event'Action.vent e) + saveAsFile()) 9 [-verride %rotected void %rocessWindo,.vent(&ava'a,t'event'Windo,.vent e) + su%er'%rocessWindo,.vent(e)) i!(e'get*D() 11 &ava'a,t'event'Windo,.vent'W*ND-W_68-S*N]) salir(null)) 9 %ublic void salir(&ava'a,t'event'Action.vent e) + i!(cerrarA%licacion()) System'exit(0)) 9 void salvar(&ava'a,t'event'Action.vent e) + saveFile()) 9 9 ;((clase %ara el mane&o de archivos(; class Nuevo im%lements &ava'a,t'event'Action8istener + FrameArchivo nuevo) %ublic Nuevo(FrameArchivo nuevo) + this'nuevo 1 nuevo) 9 [-verride %ublic void actionPer!ormed(&ava'a,t'event'Action.vent e) + nuevo'nuevo(e)) 9

11

class AbrirArchivo im%lements &ava'a,t'event'Action8istener + FrameArchivo abrir) %ublic AbrirArchivo(FrameArchivo abrir) +

Alejandro Reyes Marzano

Pg 2!

JAVA
this'abrir 1 abrir) 9

MANEJO DE ARCHIVOS

[-verride %ublic void actionPer!ormed(&ava'a,t'event'Action.vent e) + abrir'abre(e)) 9 9 class ]uardarArchivo im%lements &ava'a,t'event'Action8istener + FrameArchivo guardar) %ublic ]uardarArchivo(FrameArchivo guardar) + this'guardar 1 guardar) 9 [-verride %ublic void actionPer!ormed(&ava'a,t'event'Action.vent e)+ guardar'salvar6omo(e)) 9 9 class Salir im%lements &ava'a,t'event'Action8istener + FrameArchivo salir) %ublic Salir(FrameArchivo salir) + this'salir1salir) 9 [-verride %ublic void actionPer!ormed(&ava'a,t'event'Action.vent e) + salir'salir(e)) 9 9 class ]uardar im%lements &ava'a,t'event'Action8istener + FrameArchivo g) %ublic ]uardar(FrameArchivo g) + this'g 1 g) 9 [-verride %ublic void actionPer!ormed(&ava'a,t'event'Action.vent e) + g'salvar(e)) 9 9

0rueba" s? se *e el pro/rama

Alejandro Reyes Marzano

Pg 2"

JAVA

MANEJO DE ARCHIVOS

En la barra de men; ele/imos la opcin rchi*o lue/o ele/imos el men; ?tem nue*o para crear una nue*a lista de personas a re/istrar. : se creara una lista *ac?a.

. &espu<s de haber creado la lista ya podemos in/resar personas en la lista. 0ara ello ll<nanos los datos de la persona en los campos respecti*os. Como se *e en la ima/en.

Alejandro Reyes Marzano

Pg 3#

JAVA

MANEJO DE ARCHIVOS

!ue/o damos a/re/ar y la persona ser5 a/re/ando a la lista de personas. s? podemos se/uir in/resando mas personas a la lista.

Alejandro Reyes Marzano

Pg 31

JAVA

MANEJO DE ARCHIVOS

hora demos clicA en mostrar para mostrar la lista de personas re/istradas

En el men; archi*o seleccionamos /uardar como es la primera *e$ puedes hacer con la opcin /uardar o /uardar como- da lo mismo pero cuando el archi*o ya e1iste y estamos trabajando con ese archi*o si .ueremos actuali$a podemos hacer con la opcin /uardar y si .ueremos /uardar con otro nombre lo hacemos con /uardar como- hay .ue tener cuidado.
Alejandro Reyes Marzano Pg 32

JAVA

MANEJO DE ARCHIVOS

!ue/o le asi/namos un nombre y seleccionamos la direccin a donde se .uiere /uardar y hacemos clicA en /uardar- si hacemos clicA en cancelar no se /uardar5.

0ara abrir seleccionamos la opcin abrir del men; archi*o.

Alejandro Reyes Marzano

Pg 33

JAVA

MANEJO DE ARCHIVOS

Seleccionamos el %ichero y hacemos clicA en abrir

Finalmente mostramos la lista .ue hab?amos /uardado


Alejandro Reyes Marzano Pg 34

JAVA

MANEJO DE ARCHIVOS

Gueno- espero .ue les sir*a en al/o eso es todo por esta *e$.

Alejandro Reyes Marzano

Pg 35

También podría gustarte