Está en la página 1de 35

JAVA MANEJO DE ARCHIVOS

Manejo de Archivos en Java


1. Introduccin
Alejandro Reyes Marzano Pg 1
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
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 ojeto 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 ejemplo
public File(String pathname) ; ne6 File+73carpeta3archi*o8,9
public File(String parent, String
child) ;
ne6 File+7carpeta8- 7archi*o8,9
public File(File parent, String
child) ;
ne6 File+ne6 File+73carpeta8,- 7archi*e8,
public File(URI uri) ; 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!"roaciones # $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 4<todos +tipo y m<todo,
=ombres del %ichero
String getName()
Alejandro Reyes Marzano Pg 2
JAVA MANEJO DE ARCHIVOS
String getPath()
String getAbsolutePath()
String getParent()
boolean renameTo( File nuevoNombre )
Comprobaciones
boolean exists()
boolean canWrite()
boolean canRead()
boolean isFile()
boolean isDirectory()
boolean isAbsolute()
In%ormacin /eneral del %ichero
long lastodi!ied()
long length()
Utilidades de directorio
boolean m"dir()
String#$ list()
#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
ObjectInputStream BufferedInputStream
FilterInputStream ByteArrayInputStream
InputStream
DataInput
DataInputStream FileInputStream LineNumberInputStream
ObjectInput
PipedInputStream
PushbackInputStream
SequenceInputStream
StringBufferInputStream
Ojetos 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 2Ce1trea. 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 MANEJO DE ARCHIVOS
s 1 ne, String( b=0 ))
ta 1 ne, TextArea( s=A=?0 ))
add( ta ))
9
@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 43tele!ono34Bn 43
direccion ))
9
9
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$ 1
(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 ) 3 4Bn 4
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
Ojetos OjectIn"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
Ojetos +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
BufferedOutputStream
FilterOutputStream
ByteArrayOutputStream
OutputStream
DataOutput
DataOutputStream
FileOutputStream
ObjectOutput
ObjectOutputStream
PipedOutputStream
PrintStream
and!mAccessFile
E1aminaremos las clases FileOut"ut&trea! y +ataOut"ut&trea! para complementar los
streams de entrada .ue se han *isto.
Ojetos 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
9
Ojetos OjectOut"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 ojetos +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 ojeto +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 ,riteLoolean( boolean b ))
void ,riteLyte( int i ))
void ,riteShort( int i ))
void ,rite6har( int i ))
void ,rite*nt( int i ))
void ,riteFloat( !loat ! ))
void ,riteDouble( double d ))
void ,riteLytes( String s ))
void ,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().
Contailidad 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 'andomccessFile 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 ArchivoW
Author5 A8.>ANDR- R.X.S ARYAN-
Descri%tion5 es una clase Hue nos %ermite mane&ar archivos serialiGados
de cualHuier ob&eto' es una %lantilla
Date5 <0;0P;0Q :A5:O
6o%yright5 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 MANEJO DE ARCHIVOS
9
i! ( in%ut D1 null)
in%ut'close())
return ob&)
9

%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'getessage()))
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'getessage()))
return aux)
9
catch (6lassNotFound.xce%tion !) +
&avax's,ing'>-%tionPane'sho,essageDialog(null= 4Archivo
inexistente4
3 !'getessage()))
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 PersonaW
Author5 A8.>ANDR- R.X.S ARYAN-
Descri%tion5 es una clase Hue usaremos %ara nuestra a%licacion
Date5 <0;0P;0Q :A5:O
Alejandro Reyes Marzano Pg 1!
JAVA MANEJO DE ARCHIVOS
6o%yright5 Z<00CE<00Q alemso!t cor%
(;
%ac"age datos)
%ublic class Persona im%lements &ava'io'SerialiGable+
%rivate String nombre)
%rivate String a%ellidos)
%rivate String dni)
%rivate int edad)
;((
([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 MANEJO DE ARCHIVOS
( [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
9
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 PersonasW
Author5 A8.>ANDR- R.X.S ARYAN-
Descri%tion5 es una estructura de ob&etos
Date5 <0;0P;0Q :A5:O
6o%yright5 Z<00CE<00Q alemso!t cor%
(;
%ac"age datos)
%ublic class Personas im%lements &ava'io'SerialiGable+
%rivate &ava'util'\asha%2String =Persona/ %ersonas)
%ublic Personas() +
%ersonas 1ne, &ava'util'\asha%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'\asha%2String= Persona/ getPersonas() +
return %ersonas)
9
;((
( [establece la lista %ersonas con el %arametro %asado
(;
%ublic void setPersonas(&ava'util'\asha%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'\asha%2String =Persona/)archivo'recu%erar())
9
9
!a clase Framerchi*o.ja*a es la clase principal donde se muestra la aplicacin
;(
Name5 FrameArchivoW
Author5 A8.>ANDR- R.X.S ARYAN-
Descri%tion5 es la clase %rinci%al
Date5 <0;0P;0Q :A5:O
6o%yright5 Z<00CE<00Q alemso!t cor%
(;
%ac"age ventanas)
Alejandro Reyes Marzano Pg 21
JAVA MANEJO DE ARCHIVOS
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)
%ublic FrameArchivo() +
su%er(4'5ane&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())
&TextAreaostrar 1 ne, &avax's,ing'>TextArea())
&LuttonAgregar 1 ne, &avax's,ing'>Lutton())
&Luttonostrar 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 MANEJO DE ARCHIVOS
&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))
&TextAreaostrar'set6olumns(<0))
&TextAreaostrar'setRo,s(A))
&ScrollPane:'set`ie,%ort`ie,(&TextAreaostrar))
&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))
&Luttonostrar'setText(4ostrar4))
&Luttonostrar'addAction8istener(ne, &ava'a,t'event'Action8istener() +
%ublic void actionPer!ormed(&ava'a,t'event'Action.vent evt) +
&LuttonostrarActionPer!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(&Luttonostrar)
'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(&Luttonostrar)))
'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 &LuttonostrarActionPer!ormed(&ava'a,t'event'Action.vent evt)
+
this'mostrar())
9
%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'&TextAreaostrar'setText(s))
9
%rivate void reset()+
Alejandro Reyes Marzano Pg 25
JAVA MANEJO DE ARCHIVOS
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 &avax's,ing'>Lutton &LuttonAgregar)
%rivate &avax's,ing'>Lutton &Luttonostrar)
%rivate &avax's,ing'>8abel &8abel:)
%rivate &avax's,ing'>8abel &8abel<)
%rivate &avax's,ing'>8abel &8abelF)
%rivate &avax's,ing'>8abel &8abel?)
%rivate &avax's,ing'>enu &enu:)
%rivate &avax's,ing'>enu &enu<)
%rivate &avax's,ing'>enuLar &enuLar:)
%rivate &avax's,ing'>enu*tem &enu*temAbrir)
%rivate &avax's,ing'>enu*tem &enu*tem]uardar)
%rivate &avax's,ing'>enu*tem &enu*tem]uardar6)
%rivate &avax's,ing'>enu*tem &enu*temNuevo)
%rivate &avax's,ing'>enu*tem &enu*temSalir)
%rivate &avax's,ing'>Panel &Panel:)
%rivate &avax's,ing'>ScrollPane &ScrollPane:)
%rivate &avax's,ing'>Se%arator &Se%arator:)
%rivate &avax's,ing'>TextArea &TextAreaostrar)
%rivate &avax's,ing'>TextField &TextFieldA%ellidos)
%rivate &avax's,ing'>TextField &TextFieldDni)
%rivate &avax's,ing'>TextField &TextField.dad)
%rivate &avax's,ing'>TextField &TextFieldN-mbre)
%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 MANEJO DE ARCHIVOS
catch(.xce%tion ex)+
ex'%rintStac"Trace())
9
return !alse)
9

%ublic boolean cerrarA%licacion() +
i!(Ddirty)
return true)
int value1 >-%tionPane'sho,6on!irmDialog(this= 4Desea ]uardar los
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'&TextAreaostrar'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)+
Alejandro Reyes Marzano Pg 2
JAVA MANEJO DE ARCHIVOS
ex'%rintStac"Trace())
9
9

%ublic void abrirArchivo() +
i! (DcerrarA%licacion())
return)
i! (>File6hooser'APPR-`._-PT*-N 11
&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
9
class AbrirArchivo im%lements &ava'a,t'event'Action8istener +
FrameArchivo abrir)
%ublic AbrirArchivo(FrameArchivo abrir) +
Alejandro Reyes Marzano Pg 2!
JAVA MANEJO DE ARCHIVOS
this'abrir 1 abrir)
9
[-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