Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
AD02_Contenidos
Manejodeficheros.
Casoprctico
AnaestempezandoacursarlaFormacinenCentrosdeTrabajo
(FCT).
Ya ha tenido unas reuniones con Juan y Mara, para saber cmo
se trabaja en BK programacin. Aunque est haciendo el mdulo
de FCT en esta empresa, ya sabe que a veces tendr que salir a
otras empresas acompaada de sus tutores para ver los requisitos
de los sistemas que la empresa tenga que informatizar y, en
ocasiones, Antonio, quizs tambin se apunte para echar una
mano.
Anaestnerviosa,tambinilusionada,ytienemuchasganasdeconocerdecercalarealidaddeloque
haestudiadoenclase.
Ahora ver el uso de los conocimientos adquiridos de diferentes mdulos, y buscar respuestas a
posiblesdudasquesevayanplanteando.
En clase les haban explicado la importancia de los ficheros en el acceso a datos. Es importante
repasarlosconceptospiensaAna.
https://www.edu.xunta.es/fpadistancia/pluginfile.php/136675/mod_resource/content/1/AD02/AD02_Web/index.html
1/38
12/12/2016
AD02_Contenidos
1.Introduccin.
Si ests estudiando este mdulo, es probable que ya hayas estudiado el de
programacin, por lo que no te sern desconocidos muchos conceptos que se
tratanenestetema.
Ya sabes que cuando apagas el ordenador, los datos de la memoria RAM se
pierden. Un ordenador utiliza ficheros para guardar los datos. Piensa que los
datosdelascancionesqueoyesenmp3,laspelculasquevesenformatoavi,
o mp4, etc., estn, al fin y al cabo, almacenadas en ficheros, los cuales estn
grabadosenunsoportecomosonlosdiscosduros,DVD,pendrives,etc.
Se llama a los datos que se guardan en ficheros datos persistentes, porque
persisten ms all de la ejecucin de la aplicacin que los trata. Los ordenadores almacenan los ficheros en
unidades de almacenamiento secundario como discos duros, discos pticos, etc. En esta unidad veremos, entre
otrascosas,cmohacerconJavalasoperacionesdecrear,actualizaryprocesarficheros.
A las operaciones, que constituyen un flujo de informacin del programa con el exterior, se les conoce como
Entrada/Salida(E/S).
LasoperacionesdeE/SenJavalasproporcionaelpaqueteestndardelaAPIdeJavadenominado java.ioque
incorpora
interfaces,clasesyexcepcionesparaaccederatodotipodeficheros.
La librera java.io contiene las clases necesarias para gestionar las operaciones de entrada y salida con Java.
EstasclasesdeE/Slaspodemosagruparfundamentalmenteen:
Clasesparaleerentradasdesdeunflujodedatos.
Clasesparaescribirentradasaunflujodedatos.
Clasesparaoperarconficherosenelsistemadeficheroslocal.
Clasesparagestionarlaserializacindeobjetos.
Enlaimagenpuedesverlasclasesdelasquesedisponeen java.io.
Autoevaluacin
Indicasilaafirmacinesverdaderaofalsa:
Losdatospersistentesperdurantrasfinalizarlaejecucindelaaplicacinquelostrata.
Verdadero.
Falso.
https://www.edu.xunta.es/fpadistancia/pluginfile.php/136675/mod_resource/content/1/AD02/AD02_Web/index.html
2/38
12/12/2016
AD02_Contenidos
2.Clasesasociadasalasoperacionesdegestinde
ficherosydirectorios.
Casoprctico
AnalecomentaaAntonioPorloquenoshancomentado,vamos
atenerqueutilizarbastantelosficheros.Cmotemanejastcon
ellos?
PuestanbiencomotrespondeAntonio,yotambinestudiel
mdulodeProgramacin.Esquenorecuerdasqueenelmdulo
estudiamosuntemasobreficheros?
S,peroesque,comohabatantosmtodosparalistar,renombrar
archivos, etc., ya casi no me acuerdo y eso que hace poco que lo
estudiamoscontestaAna.
Antonio intenta tranquilizar a Ana y le dice que no se preocupe, que en cuanto se les presente la
ocasindetenerqueprogramarconficheros,seguroquenotienenproblemayrefrescanlosconceptos
queaprendieronensuda.
Enefecto,talycomodicenAnayAntonio,haybastantesmtodosinvolucrados
en las clases que en Java nos permiten manipular ficheros y carpetas o
directorios.
Vamos a ver la clase File que nos permite hacer unas cuantas operaciones
conficheros,tambinveremoscmofiltrarficheros,osea,obteneraquelloscon
una caracterstica determinada, como puede ser que tengan la
extensin
.odt, o la que nos interese, y por ltimo, en este apartado tambin veremos
comocrearyeliminarficherosydirectorios.
https://www.edu.xunta.es/fpadistancia/pluginfile.php/136675/mod_resource/content/1/AD02/AD02_Web/index.html
3/38
12/12/2016
AD02_Contenidos
2.1.ClaseFile.
Paraqusirveestaclase,qunospermite?Laclase Fileproporciona
unarepresentacinabstractadeficherosydirectorios.
Esta clase, permite examinar y manipular archivos y directorios,
independientemente de la plataforma en la que se est trabajando: Linux,
Windows,etc.
Las instancias de la clase File representan nombres de archivo, no los
archivosensmismos.
El archivo correspondiente a un nombre puede ser que no exista, por esta
raznhabrquecontrolarlasposiblesexcepciones.
Unobjetodeclase Filepermiteexaminarelnombredelarchivo,descomponerloensuramadedirectoriosocrear
elarchivosinoexiste,pasandoelobjetodetipo Fileaunconstructoradecuadocomo FileWriter(File f),que
recibecomoparmetrounobjeto File.
Paraarchivosqueexisten,atravsdelobjeto File,unprogramapuedeexaminarlosatributosdelarchivo,cambiar
sunombre,borrarloocambiarsuspermisos.Dadounobjeto File,podemoshacerlassiguientesoperacionescon
l:
Renombrar el archivo, con el
mtodo renameTo(). El objeto File dejar de referirse al archivo
renombrado,yaqueel Stringconelnombredelarchivoenelobjeto Filenocambia.
Borrarelarchivo,conelmtodo delete().Tambin,con deleteOnExit()seborracuandofinalizalaejecucin
delamquinavirtualJava.
Crearunnuevoficheroconunnombrenico.Elmtodoesttico createTempFile()creaunficherotemporaly
devuelve un objeto File que apunta a l. Es til para crear archivos temporales, que luego se borran,
asegurndonostenerunnombredearchivonorepetido.
Establecer la fecha y la hora de modificacin del archivo con setLastModified(). Por ejemplo, se podra
hacer: new File("prueba.txt").setLastModified(new Date().getTime()); para establecerle la fecha actual al
ficheroqueselepasacomoparmetro,enestecasoprueba.txt.
Crearundirectorio,medianteelmtodo mkdir().Tambinexiste mkdirs(),quecrealosdirectoriossuperiores
sinoexisten.
Listar el contenido de un directorio. Los mtodos list() y listFiles() listan el contenido de un directorio.
list() devuelve un vector de String con los nombres de los archivos, listFiles() devuelve un vector de
objetos File.
Listarlosnombresdearchivodelarazdelsistemadearchivos,medianteelmtodoesttico listRoots().
Autoevaluacin
Sealasilaafirmacinesverdaderaofalsa:
Podemosestablecerlafechademodificacindeunarchivomedianteelmtodo renameTo().
Verdadero.
Falso.
https://www.edu.xunta.es/fpadistancia/pluginfile.php/136675/mod_resource/content/1/AD02/AD02_Web/index.html
4/38
12/12/2016
AD02_Contenidos
2.1.1.ClaseFile(II).
Mediante la clase File, podemos ver si un fichero cualquiera, digamos por
ejemplo texto.txt, existe o no. Para ello, nos valemos del mtodo exists()
delaclase File.Hacemosreferenciaaeseficheroenconcretoconelcdigo
siguiente:
Filef=newFile("C:\texto.txt");
Enelsiguienterecursopuedesdescargarunapequeaaplicacinenlaquese
usa File. Como vers, permite listar el contenido de la carpeta que pongas
enuncampodetexto,introduciendoelresultadoenun JList.
Listararchivos. (0.01MB)
Pero,qupasasinosinteresacopiarunfichero,cmoloharamos?
Con la clase File no es suficiente, necesitamos saber ms, en concreto, necesitamos hablar de los flujos, como
vamosavermsadelante.
Parasaberms
Enesteenlacepuedesverejemplosparaobtenerlaspropiedadesdelosficheros,usandolaclase File:
Propiedadesdelosficheros
EjemplocreandocarpetasodirectoriosenJava
Autoevaluacin
Sealalaopcincorrecta.Conlaclase Filepodemos:
Crearficherostemporales.
Creardirectorios.
Renombrarunarchivo.
Todassoncorrectas.
https://www.edu.xunta.es/fpadistancia/pluginfile.php/136675/mod_resource/content/1/AD02/AD02_Web/index.html
5/38
12/12/2016
AD02_Contenidos
2.2.InterfaceFilenameFilter.
Hemos visto como obtener la lista de ficheros de una carpeta o directorio. A
veces, nos interesa ver no la lista completa, sino los archivos que encajan con
undeterminadocriterio.
Por ejemplo, nos puede interesar un filtro para ver los ficheros modificados
despus de una fecha, o los que tienen un tamao mayor del que el que
indiquemos,etc.
El interface FilenameFilter se puede usar para crear filtros que establezcan
criterios de filtrado relativos al nombre de los ficheros. Una clase que lo
implementedebedefinireimplementarelmtodo:
booleanaccept(Filedir,Stringnombre)
Este mtodo devolver verdadero en el caso de que el fichero cuyo nombre se indica en el parmetro nombre
aparezcaenlalistadelosficherosdeldirectorioindicadoporelparmetro dir.
En el siguiente ejemplo vemos cmo se listan los ficheros de la carpeta c:\datos que tengan la extensin .txt.
Usamos tryy catchparacapturarlasposiblesexcepciones,comoquenoexistadichacarpeta.
Listarficherosdeunacarpeta,filtrando.
Parasaberms
En el ejemplo anterior se utiliza la funcin endsWith. Por si no sabes para que se emplea, y para ver
otrasmssobretratamientodecadenas,sigueesteenlace:
Operacionesconcadenas.
https://www.edu.xunta.es/fpadistancia/pluginfile.php/136675/mod_resource/content/1/AD02/AD02_Web/index.html
6/38
12/12/2016
AD02_Contenidos
2.3.Rutasdelosficheros
Enlosejemplosquevemoseneltema,estamosusandolarutadelosficherostaly
comoseusanenMSDOS,oWindows,esdecir,porejemplo:
C:\\datos\Programacion\fichero.txt
Cdigodeseparadorderutas.
Autoevaluacin
Cuando trabajamos con fichero en Java, no es necesario capturar las excepciones, el sistema
seocupaautomticamentedeellas.
Verdadero.
Falso.
https://www.edu.xunta.es/fpadistancia/pluginfile.php/136675/mod_resource/content/1/AD02/AD02_Web/index.html
7/38
12/12/2016
AD02_Contenidos
2.4.Creacinyeliminacindeficherosydirectorios.
Cuandoqueramoscrearunfichero,podemosprocederdelsiguientemodo:
Cdigodecrearunfichero.
Para borrar un fichero podemos usar la clase File, comprobando previamente si existe el fichero, del siguiente
modo:
Paracreardirectorios,podramoshacer:
Cdigodecrearundirectorio.
Para borrar un directorio con Java, tendremos que borrar cada uno de los ficheros y directorios que ste
contenga. Al poder almacenar otros directorios, se podra recorrer
recursivamente el directorio para ir borrando
todoslosficheros.
Sepuedelistarelcontenidodeldirectorioeirborrandocon:
File[]ficheros=directorio.listFiles();
Sielelementoesundirectorio,losabemosmedianteelmtodo isDirectory().
Autoevaluacin
Indicasilasiguienteafirmacinesverdaderaofalsa:
Podemosestableceruncriterioparalistarficherosmediante FileNameFilter.
Verdadero.
Falso.
https://www.edu.xunta.es/fpadistancia/pluginfile.php/136675/mod_resource/content/1/AD02/AD02_Web/index.html
8/38
12/12/2016
AD02_Contenidos
3.Flujos.
Casoprctico
https://www.edu.xunta.es/fpadistancia/pluginfile.php/136675/mod_resource/content/1/AD02/AD02_Web/index.html
9/38
12/12/2016
AD02_Contenidos
3.1.Flujosbasadosenbytes.
Para el tratamiento de los flujos de bytes, hemos dicho que Java tiene dos clases
abstractasqueson InputStreamy OutputStream.
Losarchivosbinariosguardanunarepresentacindelosdatosenelarchivo,esdecir,
cuando guardamos texto no guardan el texto en si, sino que guardan su
representacinenuncdigollamado
UTF8.
Las clases principales que heredan de OutputStream, para la escritura de ficheros
binariosson:
FileOutputStream:
Enelsiguienteejemplosepuedevercmoseescribeaunarchivobinariocon DataOutputStream:
Escrituraaficherobinario.
Resumentextualalternativo
Cdigodeproyectodeescrituraaficherobinario. (0.01MB)
Enelsiguienteenlacepuedesvercmoleerdeunarchivobinariomediantelaclase FileInputStream:
Leerbinario
Autoevaluacin
Sealasilaafirmacinesverdaderaofalsa:
https://www.edu.xunta.es/fpadistancia/pluginfile.php/136675/mod_resource/content/1/AD02/AD02_Web/index.html
10/38
12/12/2016
AD02_Contenidos
Falso.
https://www.edu.xunta.es/fpadistancia/pluginfile.php/136675/mod_resource/content/1/AD02/AD02_Web/index.html
11/38
12/12/2016
AD02_Contenidos
3.2.Flujosbasadosencaracteres.
Paralosflujosdecaracteres,Javadisponededosclasesabstractas: Reader y
Writer.
Si se usan slo FileInputStream, FileOuputStream, FileReader o
FileWriter, cada vez que se efecta una lectura o escritura, se hace
fsicamente en el disco duro. Si se leen o escriben pocos caracteres cada vez,
elprocesosehacecostosoylentoporlosmuchosaccesosadiscoduro.
Los
escribe,estaclasecontrolalosaccesosadisco.As,sivamosescribiendo,seguardarnlosdatoshastaquehaya
bastantesdatoscomoparahacerunaescrituraeficiente.
Al leer, la clase leer ms datos de los que se hayan pedido. En las siguientes lecturas nos dar lo que tiene
almacenado, hasta que necesite leer otra vez fsicamente. Esta forma de trabajar hace los accesos a disco ms
eficientesyelprogramaseejecutamsrpido.
Enelsiguienteejemplo,puedesvercmoseleeunarchivoguardadoeneldirectorioraz,denominadoarchivo.txt,
cuandosepulsaelbotndelaaplicacin.Elcontenidoseintroduceenelreadetexto.
ProyectoJavaparaleerficherodetexto. (0.01MB)
Debesconocer
Vdeosobreelpaquetejava.io.
Vdeosobre java.io.
Resumentextualalternativo
Parasaberms
EnesteenlacepuedesaprendermssobreinternacionalizacinyUnicode.
Internacionalizacin
Autoevaluacin
https://www.edu.xunta.es/fpadistancia/pluginfile.php/136675/mod_resource/content/1/AD02/AD02_Web/index.html
12/38
12/12/2016
AD02_Contenidos
Mediante las clases que proporcionan buffers se pretende que se hagan lecturas y escrituras
fsicasadisco,loantesposibleycuantasmsmejor.
Verdadero.
Falso.
https://www.edu.xunta.es/fpadistancia/pluginfile.php/136675/mod_resource/content/1/AD02/AD02_Web/index.html
13/38
12/12/2016
AD02_Contenidos
4.Formasdeaccesoaunfichero.
Casoprctico
HemosvistoqueenJavapuedesutilizardostiposdeficheros(detextoobinarios)
ydostiposdeaccesoalosficheros(secuencialoaleatorio).Sibien,ysegnla
literatura que consultemos, a veces se distingue una tercera forma de acceso
denominadaconcatenacin,tuberasopipes.
Accesoaleatorio:losarchivosdeaccesoaleatorio,aligualqueloquesucede
usualmenteconlamemoria(RAM=RandomAccessMemory),permitenacceder
a los datos en forma no secuencial, desordenada. Esto implica que el archivo
debeestardisponibleensutotalidadalmomentodeseraccedido,algoqueno
siempreesposible.
Acceso secuencial: En este caso los datos se leen de manera secuencial,
desdeelcomienzodelarchivohastaelfinal(elcualmuchasvecesnoseconoce
apriori).Esteeselcasodelalecturadeltecladoolaescrituraenunaconsola
detexto,nosesabecundoeloperadorterminardeescribir.
Concatenacin (tuberas o "pipes"): Muchas veces es til hacer conexiones entre programas que se
ejecutansimultneamentedentrodeunamismamquina,demodoqueloqueunoproduceseenvaporun
"tubo" para ser recibido por el otro, que est esperando a la salida del tubo. Las tuberas cumplen esta
funcin.
Parasaberms
EnesteenlacepuedesaprendermssobretuberasenJava.
Tuberas
Citasparapensar
Elfuturotienemuchosnombres.Paralosdbilesesloinalcanzable.Paralostemerosos,
lodesconocido.Paralosvalienteseslaoportunidad.
VctorHugo.
https://www.edu.xunta.es/fpadistancia/pluginfile.php/136675/mod_resource/content/1/AD02/AD02_Web/index.html
14/38
12/12/2016
AD02_Contenidos
4.1.Operacionesbsicassobreficherosdeaccesosecuencial.
Como operaciones ms comunes en ficheros de acceso secuencial,
tenemoselaccesopara:
Crearunficherooabrirloparagrabardatos.
Leerdatosdelfichero.
Borrarinformacindeunfichero.
Copiardatosdeunficheroaotro.
Bsquedadeinformacinenunfichero.
Cerrarunfichero.
Veamosestasoperacionesenunosejemploscomentados.
Enesteprimerejemplo,vemoscmosecreaelficherosinoexiste,oseabreparaaadirdatossiyaexiste:
Grabardatosenficherosecuencial.
Resumentextualalternativo
Grabarenficherosecuencial. (0.01MB)
Enesteejemploverscmopodemoscopiarunarchivoorigen,aotrodestino,desdelalneadecomandos.
Copiarfichero.
https://www.edu.xunta.es/fpadistancia/pluginfile.php/136675/mod_resource/content/1/AD02/AD02_Web/index.html
15/38
12/12/2016
AD02_Contenidos
Resumentextualalternativo
Copiarfichero. (0.01MB)
En este ltimo ejemplo, has visto cmo usar la clase bsica que nos permite utilizar un fichero para escritura de
bytes:laclase FileOutputStream.
Paramejorarlaeficienciadelaaplicacinreduciendoelnmerodeaccesosalosdispositivosdesalidaenlosque
sealmacenaelfichero,sepuedemontarunbufferasociadoalflujodetipo FileOutputStream.Deesoseencarga
la clase BufferedOutputStream, que permite que la aplicacin pueda escribir bytes en el flujo sin que
necesariamentehayaquellamaralsistemaoperativoparacadabyteescrito.
Debesconocer
Enesteenlacepuedesverunejemploconbuffer.
Flujosdesalidaconbuffer.
Cuando se trabaja con ficheros de texto se recomienda usar las clases Reader, para entrada o lectura de
caracteres, y Writer para salida o escritura de caracteres. Estas dos clases estn optimizadas para trabajar con
caracteresycontextoengeneral,debidoaquetienenencuentaquecadacarcterUnicodeestrepresentadopor
dosbytes.
Lassubclasesde Writery Readerquepermitentrabajarconficherosdetextoson:
FileReader,paralecturadesdeunficherodetexto.Creaunflujodeentradaquetrabajaconcaracteresenvez
deconbytes.
FileWriter,paraescriturahaciaunficherodetexto.Creaunflujodesalidaquetrabajaconcaracteresenvez
deconbytes.
Tambinsepuedemontarunbuffersobrecualquieradelosflujosquedefinenestasclases:
BufferedWriterseusaparamontarunbuffersobreunflujodesalidadetipo FileWriter.
BufferedReaderseusaparamontarunbuffersobreunflujodeentradadetipo FileReader.
https://www.edu.xunta.es/fpadistancia/pluginfile.php/136675/mod_resource/content/1/AD02/AD02_Web/index.html
16/38
12/12/2016
AD02_Contenidos
Autoevaluacin
Sealasilaafirmacinesverdaderaofalsa:Laclase Readerestoptimizadaparatrabajarconficheros
binarios.
Verdadero.
Falso.
https://www.edu.xunta.es/fpadistancia/pluginfile.php/136675/mod_resource/content/1/AD02/AD02_Web/index.html
17/38
12/12/2016
AD02_Contenidos
4.1.1.Operacionesbsicassobreficherosdeaccesosecuencial(II).
Veamosunejemplodelecturautilizandoun BufferReader.
Laclaselapuedesdescargardeaqu:
ClaseparaleerdesdeficheroconBuffer.
Enunodelosejemplosanteriores,hasvistocomopodemosgrabarinformacinaun
archivo secuencial, concretamente nombre, apellidos y edad de las personas que
vayamosintroduciendo.
Ahora vamos a ver cmo buscar en un archivo secuencial, usando ese mismo
ejemplo.Laideaesquealserunficherosecuencial,tenemosqueabrirloeirleyendo
hastaencontrareldatoquebuscamos,siesqueloencontramos.
Elproyectocompletolopuedesdescargardeaqu:
ProyectoJavaparabuscarenficherosecuencial. (0.01MB)
Parasaberms
Aunqueestneningls,haymuchsimosejemploseinformacinsobrelaclase java.io.
JavaI/O(Input/Output)
https://www.edu.xunta.es/fpadistancia/pluginfile.php/136675/mod_resource/content/1/AD02/AD02_Web/index.html
18/38
12/12/2016
AD02_Contenidos
4.2.Operacionesbsicassobreficherosdeaccesoaleatorio.
A menudo, no necesitas leer un fichero de principio a fin, sino simplemente
acceder al fichero como si fuera una base de datos, donde se salta de un
registroaotrocadaunoendiferentespartesdelfichero.Javaproporcionauna
clase RandomAccessFileparaestetipodeentrada/salida.
Estaclase:
Permite leer y escribir sobre el fichero, no es necesario dos clases
diferentes.
Necesita que le especifiquemos el modo de acceso al construir un
objetodeestaclase:slolecturaobienlecturayescritura.
Posee mtodos especficos de desplazamiento como seek(long
posicion) o skipBytes(int desplazamiento) para poder movernos de un
registroaotrodelfichero,oposicionarnosdirectamenteenunaposicinconcretadelfichero.
Poresascaractersticasquepresentalaclase,unarchivodeaccesodirectotienesusregistrosdeuntamaofijoo
predeterminadodeantemano.
Laclaseposeedosconstructores:
RandomAccessFile(Filefile,Stringmode).
RandomAccessFile(Stringname,Stringmode).
Enelprimercasosepasaunobjeto Filecomoprimerparmetro,mientrasqueenelsegundocasoesunString.
Elmodoes:"r"siseabreenmodolecturao"rw"siseabreenmodolecturayescritura.
A continuacin puedes ver una presentacin en la que se muestra cmo abrir y escribir en un fichero de acceso
aleatorio. Tambin, en el segundo cdigo descargable, se presenta el cdigo correspondiente a la escritura y
localizacinderegistrosenficherosdeaccesoaleatorio.
Escribirenficherosdeaccesoaleatorio.
https://www.edu.xunta.es/fpadistancia/pluginfile.php/136675/mod_resource/content/1/AD02/AD02_Web/index.html
19/38
12/12/2016
AD02_Contenidos
Resumentextualalternativo
Claseparaescribirenficherosdeaccesoaleatorio.
Descargarproyectoparaescribirylocalizardatosenficherosdeaccesoaleatorio. (0.01MB)
Autoevaluacin
Indicasilaafirmacinesverdaderaofalsa:
Unobjetodelaclase RandomAccessFilenecesitaelmododeaccesoalcrearelobjeto.
Verdadero.
Falso.
https://www.edu.xunta.es/fpadistancia/pluginfile.php/136675/mod_resource/content/1/AD02/AD02_Web/index.html
20/38
12/12/2016
AD02_Contenidos
5.TrabajoconficherosXML:analizadoressintcticos
(parser)yvinculacin(binding).
Casoprctico
Probablemente hayas estudiado ya XML, bien porque hayas cursado el mdulo Lenguajes de
marcas y sistemas de gestin de informacin, o bien porque lo conozcas por tu cuenta. Si no
conoces XML, te recomendamos que te familiarices con l, hay mltiples tutoriales y cursos en
Internet.
ElmetalenguajeXMLsecreaparaevitarproblemasdeinteroperabilidadentreplataformasyredes.
Conlseconsigueunsoporteestndarparaelintercambiodedatos:noslolosdatosestnenun
formato estndar sino tambin la forma de acceder a ellos. Y entre las ventajas de su uso
destacamos:
Facilita el intercambio de informacin entre distintas aplicaciones ya que se basa en
estndaresaceptados.
Proporciona una visin estructurada de la informacin, lo que permite su posterior
tratamientodeformalocal.
https://www.edu.xunta.es/fpadistancia/pluginfile.php/136675/mod_resource/content/1/AD02/AD02_Web/index.html
21/38
12/12/2016
AD02_Contenidos
5.1.Conceptosprevios.
Cmo se trabaja con datos XML desde el punto de vista del desarrollador de
aplicaciones?
UnaaplicacinqueconsumeinformacinXMLdebe:
Leerunficherodetextocodificadosegndichoestndar.
Cargarlainformacinenmemoriay,desdeall...
Procesar esos datos para obtener unos resultados (que posiblemente
tambinalmacenardeformapersistenteenotroficheroXML).
El proceso anterior se enmarca dentro de lo que se conoce en informtica como "parsing" o anlisis lxico
sintctico, y los programas que lo llevan a cabo se denominan "parsers" o analizadores (lxicosintcticos). Ms
especficamente podemos decir que el "parsing XML" es el proceso mediante el cual se lee y se analiza un
documento XML para comprobar que est bien formado para, posteriormente, pasar el contenido de ese
documentoaunaaplicacinclientequenecesiteconsumirdichainformacin.
Schema: Un esquema (o schema) es una especificacin XML que dicta los componentes permitidos de un
documento XML y las relaciones entre los componentes. Por ejemplo, un esquema identifica los elementos que
pueden aparecer en un documento XML, en qu orden deben aparecer, qu atributos pueden tener, y qu
elementossonsubordinados(estoes,sonelementoshijos)paraotroselementos.UndocumentoXMLnotienepor
qutenerunesquema,perosilotiene,debeatenerseaeseesquemaparaserundocumentoXMLvlido.
Parasaberms
Enelsiguienteenlacedelawikipediapuedesverelconceptodeesquemayalgnqueotroejemplo:
EsquemasXML
Autoevaluacin
Disilaafirmacinesverdaderaofalsa:
XMLhacemsfcilelintercambiodeinformacinentresistemas.
Verdadero.
Falso.
https://www.edu.xunta.es/fpadistancia/pluginfile.php/136675/mod_resource/content/1/AD02/AD02_Web/index.html
22/38
12/12/2016
AD02_Contenidos
5.2.Definiciones.
Qu es y para qu sirve JAXB (Java Architecture for XML Binding)? JAXB
simplifica el acceso a documentos XML representando la informacin obtenida
delosdocumentosXMLenunprogramaenformatoJava,osea,proporcionaa
los desarrolladores de aplicaciones Java, una forma rpida para vincular
esquemasXMLarepresentacionesJava.
JAXBproporcionamtodospara,apartirdedocumentosXML,obtenerrboles
de contenido (generados en cdigo Java), para despus operar con ellos o
manipular los los mismos en una aplicacin Java y generar documentos XML
conlaestructuradelosiniciales,peroyamodificados.
Parsear un documento XML consiste en "escanear" el documento y dividirlo o separarlo lgicamente en piezas
discretas.Elcontenidoparseadoestentoncesdisponibleparalaaplicacin.
Binding:Bindingovincularunesquema(schema)significagenerarunconjuntodeclasesJavaquerepresentanel
esquema.
Compilador de esquema o schema compiler: liga un esquema fuente a un conjunto de elementos de programa
derivados.LavinculacinsedescribemedianteunlenguajedevinculacinbasadoenXML.
>Bindingruntime
framework:proporcionaoperacionesdeunmarshallingymarshallingparaacceder,manipular
yvalidarcontenidoXMLusandounesquemaderivadooelementosdeprograma.
Marshalling:esunprocesodecodificacindeunobjetoenunmediodealmacenamiento,normalmenteunfichero.
ProporcionaaunaaplicacinclientelacapacidadparaconvertirunrboldeobjetosJavaJAXBaficherosXML.Por
defecto,elmarshallerusacodificacinUTF8cuandogeneralosdatosXML.
Unmarshalling: proporciona a una aplicacin cliente la capacidad de convertir datos XML a objetos Java JAXB
derivados.
Parasaberms
Hay muchos "parsers" conocidos, como SAX (Simple API for XML). SAX es un API para parsear
ficheros XML. Proporciona un mecanismo para leer datos de un documento XML. Otra alternativa es
DOM(DocumentObjectModel).
TienesmsinformacinsobreDOMenlawikipedia:
DOM
EnesteenlaceseveunejemplodecmoparsearunficheroXMLmedianteSAX.
Parsear
Resumentextualalternativo
https://www.edu.xunta.es/fpadistancia/pluginfile.php/136675/mod_resource/content/1/AD02/AD02_Web/index.html
23/38
12/12/2016
AD02_Contenidos
5.3.IntroduccinaJAXB.
JAXBpermitemapearclasesJavaarepresentacionesenXMLyviceversa.
JAXBproporcionadosprincipalescaractersticas:
Lacapacidaddeserializar(marshalling)objetosJavaaXML.
Loinverso,esdecir,deserializar(unmarshalling)XMLaobjetosJava.
O sea que JAXB permite almacenar y recuperar datos en memoria en cualquier formato XML, sin la
necesidad de implementar un conjunto especfico de rutinas XML de carga y salvaguarda para la estructura
declasesdelprograma.
ElcompiladordeJAXB(schemacompiler)permitegenerarunaseriedeclasesJavaquepodrnserllamadasdesde
nuestrasaplicacionesatravsdemtodossetsygetsparaobteneroestablecerlosdatosdeundocumentoXML.
ElfuncionamientoesquemticoalusarJAXBsera:
Crearunesquema(fichero .xsd)quecontendrlasestructuradelasclasesquedeseamosutilizar.
Compilar con el JAXB compiler (bien con un IDE como NetBeans o desde lnea de comandos con el
comandoxjc)esefichero .xsd,demodoquenosproducirlos
POJOs,osea,unaclaseporcadaunode
lostiposquehayamosespecificadoenelfichero .xsd.Estonosproducirlosficheros .java.
Compilaresasclasesjava.
CrearundocumentoXML:validadoporsucorrespondienteesquemaXML,oseaelfichero.xsd,secreaun
rboldeobjetos.
Ahora se puede parsear el documento XML, accediendo a los mtodos gets y sets del rbol de objetos
generadosporelprocesoanterior.Assepodrmodificaroaadirdatos.
Despusderealizarloscambiosqueseestimen,serealizaunprocesoparasobrescribireldocumentoXML
ocrearunnuevodocumentoXML.
Autoevaluacin
UnschemapermitevalidarundocumentoXML.
Verdadero.
Falso.
https://www.edu.xunta.es/fpadistancia/pluginfile.php/136675/mod_resource/content/1/AD02/AD02_Web/index.html
24/38
12/12/2016
AD02_Contenidos
5.4.FuncionamientodeJAXB.
ParaconstruirunaaplicacinJAXBnecesitamostenerunesquemaXML.
Tras obtener el esquema XML, seguimos los siguientes pasos para
construirlaaplicacinJAXB:
1.Escribir el esquema: es un documento XML que contiene la
estructura que se tomar como indicaciones para construir las clases.
Estas indicaciones pueden ser, por ejemplo, el tipo primitivo al que se
debeunirunvalordeatributoenlaclasegenerada.
2.GenerarlosficherosfuentedeJava:paraestousamoselcompilador
de esquema, ya que ste toma el esquema como entrada de
informacin. Cuando se haya compilado el cdigo fuente, podremos
escribirunaaplicacinbasadaenlasclasesqueresulten.
3.Construir el rbol de objetos Java: con nuestra aplicacin, se genera el rbol de objetos java, tambin
llamado rbol de contenido, que representa los datos XML que son validados con el esquema. Hay dos
formasdehaceresto:
a.
Instanciandolasclasesgeneradas.
b.Invocando al mtodo unmarshall de una clase generada y pasarlo en el documento. El mtodo
unmarshalltomaundocumentoXMLvlidoyconstruyeunarepresentacinderboldeobjetos.
4.Accederalrboldecontenidousandonuestraaplicacin:ahorapodemosaccederalrboldecontenido y
modificarsusdatos.
5.Generar un documento XML desde el rbol de contenido. Para poder hacerlo tenemos que invocar al
mtodo marshallsobreelobjetorazdelrbol.
Aunqueestospasosqueacabamosdecomentarteteparezcanalgocomplicados,vamosaverunejemplosencillo,
enelqueclarificaremostodoesto,comprobandoquenoestandifcilcomoparece.
Vamosasuponerunaestructuradeunarchivoquepodrausarseenunalmacndistribuidordemedicamentos.El
fichero albaran.xsd tiene la estructura que el almacn usa cuando enva un pedido de medicamentos que le ha
hechounafarmacia.
Puedesdescargarloparaexaminarloaqu:
Ficheroalbaran.xsd (1KB)
Vamosavereldesarrollodelproyectoenlasiguientepresentacin:
EjemplodeproyectosencilloconJAXB.
https://www.edu.xunta.es/fpadistancia/pluginfile.php/136675/mod_resource/content/1/AD02/AD02_Web/index.html
25/38
12/12/2016
AD02_Contenidos
Resumentextualalternativo
Elproyectoresultantetrasseguirlospasosdelapresentacinseencuentraaqu:
ProyectoJAXB (0.03MB)
Parasaberms
Enelsiguienteenlacepuedesverunejemplopasoapasoenelque:
SecreaelficherodeesquemaXML.
SecreaunproyectonuevoconNetBeans.
SeaadeunJAXBBindingutilizandoelficheroXSDcreadoanteriormente.
SeaadeunserviciowebyseutilizalasclasesJavaJAXBBindingcomountipodeobjeto.
EjemploconJAXB
https://www.edu.xunta.es/fpadistancia/pluginfile.php/136675/mod_resource/content/1/AD02/AD02_Web/index.html
26/38
12/12/2016
AD02_Contenidos
6.LibrerasparaconversindedocumentosXMLaotros
formatos.
Casoprctico
Parasaberms
En el siguiente enlace puedes ver un tutorial de otra herramienta de conversin de XML a otros
formatos.
XSL
Autoevaluacin
JasperReportpermitegenerardocumentosenformatohtml.
Verdadero.
Falso.
https://www.edu.xunta.es/fpadistancia/pluginfile.php/136675/mod_resource/content/1/AD02/AD02_Web/index.html
27/38
12/12/2016
AD02_Contenidos
6.1.IntroduccinaJasperReport.
EnJava,duranteuntiempo,lageneracindeinformesfueunodelospuntos
dbilesdellenguaje,perohoyenda,existenmuchaslibrerasyherramientas
dedicadas(variasdeellas,de
cdigoabierto)paralarpidageneracinde
informes.JasperReports,esunadelasmsconocidas.
JasperReports es una herramienta que consta de un poderoso motor para la generacin de informes. Est
empaquetadaenunarchivoJARypuedeserutilizadacomounalibrera,laculpodemosintegrarencualquierIDE
dedesarrolloenJavaparadesarrollarnuestrasaplicaciones.EstescritatotalmenteenJava,sucdigoesabiertoy
estotalmentegratuitabajolostrminosdelalicenciaGPL(LicenciaPblicaGeneral).
SivisitaselsiguienteenlacepodrsaccederalapginadedescargadeJasperReportsparatodaslasplataformas.
Encontrars una lista con todas las versiones disponibles, no es necesario identificarte para poder bajarte la que
desees.
ZonadedescargadeJasperReports
Ladescargayelcontenidodelodescargadolopodemosverenlasiguientepresentacin:
Debesconocer
DescargadeJasperReportseintegracinenNetBeans.
Resumentextualalternativo
En la presentacin que acabas de ver, al descomprimir el fichero de la descarga, has visto que en el mismo hay
variosdirectoriosocarpetas.Comentamosbrevementequcontienecadauna:
build:eslalibreraJasperReportssinempaquetar,contodaslasclasesqueincluye.
demo: podemos encontrar algunos ejemplos de utilizacin de la librera. Estos ejemplos estn preparados
para ser compilados con la herramienta "ant". Puedes inspeccionar el cdigo Java e intentar compilarlos y
ejecutarlos.
https://www.edu.xunta.es/fpadistancia/pluginfile.php/136675/mod_resource/content/1/AD02/AD02_Web/index.html
28/38
12/12/2016
AD02_Contenidos
dist:esdondeseencuentrarealmentelalibreraempaquetadaenunficheroJAR(jasperreports3.7.4.jar)y
algunosficherosJARquenoutilizaremos.Tambinpodemosaccederaladocumentacintipojavadoc.
docs:eslareferenciarpidaenformatoXML.
lib:DiferenteslibrerasnecesariasporJasperReports,comoalgunasparaexportaradistintosformatos,para
incluirgrficos,etc.
src:Ficherosfuentedelalibrera.
Parasaberms
EnesteenlacetienesladocumentacinenlneadelaAPIdeJasperReports.
APIdeJasperReports
https://www.edu.xunta.es/fpadistancia/pluginfile.php/136675/mod_resource/content/1/AD02/AD02_Web/index.html
29/38
12/12/2016
AD02_Contenidos
6.2.Disearycompilarlaplantilla.
Las plantillas de los informes de JasperReports son sencillamente
ficheros XML con la extensin .jrxml. Podemos hacer que NetBeans
reconozca este tipo de ficheros como XML, para que cuando los
editemos en el editor se muestren los mismos cdigos de colores en las
etiquetasydemselementosdelasintaxisdeXML.
Enlaimagenseilustracmoconseguirlo:enNetBeanspinchamosenel
menTools,yahenOptions.AhseleccionamosMiscellaneous,luegola
pestaa Files. Entonces pulsamos en el botn New... para aadir la
nuevaextensin.
LospasosaseguirparatrabajarconJasperReportseran:
Paso 1: Disear la plantilla del informe: un fichero .jrxml. El documento de diseo est representado por un
archivoXMLquemantienelaestructuradeunarchivo
DTD(DocumentTypeDefinition)definidoporelmotorde
JasperReports.
LageneracindeundiseoimplicaeditarunarchivoXMLvalidadomediante:
<!DOCTYPEjasperReportPUBLIC"//JasperReports//DTDReportDesign//EN""http://jasperreports.sourcefo
Estos documentos XML cuentan con una estructura similar a la de cualquier documento de texto.
Fundamentalmentesesiguenestassecciones:
titleTtulodelinforme.
pageHeaderEncabezadodeldocumento.
columnHeaderEncabezadodelascolumnas.
detailDetalledeldocumento.Cuerpo
columnFooterPiedelacolumna.
pageFooterPiedeldocumento.
sumaryCierredeldocumento.
Paso 2: Compilacin: Una vez que se ha realizado el diseo, se compila antes de poder iniciar el proceso de
cargadedatos.Lacompilacinsellevaacaboatravsdelmtodo compileReport().
En este proceso, el diseo se transforma en un objeto serializable de tipo net.sf.jasperreports.engine
JasperReport,queluegoseguardaendisco.
Autoevaluacin
Escorrectalaafirmacinsiguiente?
LosdocumentosXMLqueseusaneneldiseodelosinformescuentanconunaseriedesecciones.
Verdadero.
Falso.
https://www.edu.xunta.es/fpadistancia/pluginfile.php/136675/mod_resource/content/1/AD02/AD02_Web/index.html
30/38
12/12/2016
AD02_Contenidos
6.3.Rellenarelinformecondatos,exportarelinforme.
Paso3:Rellenarelinformecondatos:mediantelosmtodosfillReportXXX(),
se puede realizar la carga de datos del informe, pasndole como parmetros el
objetodediseo(obien,elarchivoquelorepresentaenformato
serializado)y
laconexinJDBCalabasededatosdesdedondeseobtendrlainformacinque
necesitemos.
Como resultado de este proceso, se obtiene un objeto que representa un
documento listo para ser impreso, un objeto serializable de tipo JasperPrint.
Este objeto puede guardarse en disco para su uso posterior, o bien puede ser
impreso,enviadoalapantallaotransformadoenPDF,XLS,CSV,etc.
Paso4:Visualizacin
Ahora podemos optar por mostrar un informe por pantalla, imprimirlo, o bien
obtenerloenalgntipoespecficodefichero,comoPDF,etc.
Paramostraruninformeporpantallaseutilizalaclase JasperViewer, la cual, a travs de su mtodo main(),
recibeelinformeamostrar.
Para imprimir el informe usaremos los mtodos printReport(),printPage() o printPages(), contenidos en la
clase JasperPrintManager.
ParaexportarlosdatosaunformatodearchivoespecficopodemosutilizarlosmtodosexportReportXXX().
Vamosaconstruirunejemplocomentadoenlasiguientepresentacin:
EjemploconJasperReports.
Resumentextualalternativo
Seguimos desarrollando el ejemplo. Ahora vamos a hacer que obtenga datos de una base de datos. En concreto,
delabasededatosderbyqueseincluyealinstalareljdk.
SeguimosconconJasperReports.
https://www.edu.xunta.es/fpadistancia/pluginfile.php/136675/mod_resource/content/1/AD02/AD02_Web/index.html
31/38
12/12/2016
AD02_Contenidos
Resumentextualalternativo
Parasaberms
ElprincipalinconvenientequepuedesencontrartealtrabajarconJasperReportssinms,essindudael
diseo del informe. Por ello, para facilitar el diseo de los mismos, y hacerlos de manera visual y
cmoda se pueden usar otros productos como iReport, que es tambin una herramienta de software
libre.
HaymuchadocumentacinsobreiReportenlared,aquteadjuntamosdos:
TutorialiReport
CrearinformesconiReport
https://www.edu.xunta.es/fpadistancia/pluginfile.php/136675/mod_resource/content/1/AD02/AD02_Web/index.html
32/38
12/12/2016
AD02_Contenidos
AnexoI.Listarficherosdeunacarpeta,filtrando.
importjava.io.File;
importjava.io.FilenameFilter;
publicclassFiltrarimplementsFilenameFilter{
Stringextension;
//Constructor
Filtrar(Stringextension){
this.extension=extension;
}
publicbooleanaccept(Filedir,Stringname){
returnname.endsWith(extension);
}
publicstaticvoidmain(String[]args){
try{
//Obtendremosellistadodelosarchivosdeesedirectorio
Filefichero=newFile("c:\\datos\\.");
String[]listadeArchivos=fichero.list();
//Filtraremosporlosdeextension.txt
listadeArchivos=fichero.list(newFiltrar(".txt"));
//Comprobamoselnmerodearchivosenellistado
intnumarchivos=listadeArchivos.length;
//Sinohayningunoloavisamosporconsola
if(numarchivos<1)
System.out.println("Nohayarchivosquelistar");
//Ysihay,escribimossunombreporconsola.
else
{
for(intconta=0;conta<listadeArchivos.length;
conta++)
System.out.println(listadeArchivos[conta]);
}
}
catch(Exceptionex){
System.out.println("Erroralbuscarenlarutaindicada");
}
}
}
https://www.edu.xunta.es/fpadistancia/pluginfile.php/136675/mod_resource/content/1/AD02/AD02_Web/index.html
33/38
12/12/2016
AD02_Contenidos
AnexoII.Cdigodeseparadorderutas.
StringsubstFileSeparator(Stringruta){
Stringseparador="\\";
try{
//SiestamosenWindows
if(File.separator.equals(separador))
separador="/";
//Reemplazatodaslascadenasquecoincidenconlaexpresin
//regulardadaoldSepporlacadenaFile.separator
returnruta.replaceAll(separador,File.separator);
}catch(Exceptione){
//Porsiocurreunajava.util.regex.PatternSyntaxException
returnruta.replaceAll(separador+separador,File.separator);
}
}
https://www.edu.xunta.es/fpadistancia/pluginfile.php/136675/mod_resource/content/1/AD02/AD02_Web/index.html
34/38
12/12/2016
AD02_Contenidos
AnexoIII.Cdigodecrearunfichero.
try{
//Creamoselobjetoqueencapsulaelfichero
Filefichero=newFile("c:\\prufba\\miFichero.txt");
//ApartirdelobjetoFilecreamoselficherofsicamente
if(fichero.createNewFile())
else
System.out.println("Elficherosehacreadocorrectamente");
System.out.println("Nohapodidosercreadoelfichero");
}catch(Exceptionioe){
ioe.getMessage();
https://www.edu.xunta.es/fpadistancia/pluginfile.php/136675/mod_resource/content/1/AD02/AD02_Web/index.html
35/38
12/12/2016
AD02_Contenidos
AnexoIV.Cdigodecrearundirectorio.
try{
//Declaracindevariables
Stringdirectorio="C:\\prueba";
Stringvarios="carpeta1/carpeta2/carpeta3";
//Crearundirectorio
booleanexito=(newFile(directorio)).mkdir();
if(exito)
System.out.println("Directorio:"+directorio+"creado");
//Crearvariosdirectorios
exito=(newFile(varios)).mkdirs();
if(exito)
System.out.println("Directorios:"+varios+"creados");
}catch(Exceptione){
System.err.println("Error:"+e.getMessage());
}
https://www.edu.xunta.es/fpadistancia/pluginfile.php/136675/mod_resource/content/1/AD02/AD02_Web/index.html
36/38
12/12/2016
AD02_Contenidos
Anexo.Licenciasderecursos.
LicenciasderecursosutilizadosenlaUnidaddeTrabajo
Recurso(1)
Datosdelrecurso(1)
Recurso(2)
Autora:daddo83.
Licencia:CCbync.
Procedencia:
http://www.flickr.com/photos/daddo83/3406962115/
Autora:O'Reilly
Licencia:Copyrig
Procedencia:
http://aps2.elekt
Autora:Art3mis4.
Licencia:CCbyncsa.
Procedencia:
http://www.flickr.com/photos/art3mis4/4910243349/
Autora:JosJa
Licencia:Copyrig
Procedencia:Ca
deMicrosoft.
Autora:Kasaa.
Licencia:CCbync.
Procedencia:
http://www.flickr.com/photos/kasaa/2693784352/
Autora:PedroS
Licencia:CCby
Procedencia: htt
Autora:m.
Licencia:CCbync.
Procedencia:
http://www.flickr.com/photos/asmamirza/2599581983/
Autora:Conven
Licencia:CCby.
Procedencia:
http://www.flickr.
Autora:Ornellaswouldgo.
Licencia:CCby.
Procedencia:
http://www.flickr.com/photos/ornellas/4257487503/
Autora:Identity
Licencia:CCby
Procedencia:
is/71240905/
Autora:aldoaldoz.
Licencia:CCbyncsa.
Procedencia:
http://www.flickr.com/photos/aldoaldoz/3895614433/#/
Autora:Danard
Licencia:CCby.
Procedencia:
http://www.flickr.
Autora:Fartese.
Licencia:CCbysa.
Procedencia:
http://www.flickr.com/photos/fartese/4214174953/
Autora:RalphTQ
Licencia:CCby
Procedencia:htt
Autora:Roland.
Licencia:CCby.
Procedencia:
http://www.flickr.com/photos/roland/4358742850/
Autora:Freddy
Licencia:CCby.
Procedencia:
boy/3483094014
https://www.edu.xunta.es/fpadistancia/pluginfile.php/136675/mod_resource/content/1/AD02/AD02_Web/index.html
37/38
12/12/2016
AD02_Contenidos
Recurso(1)
Datosdelrecurso(1)
Autora:JosJavierBermdezHernndez.
Licencia:GNUGPLv2.
Procedencia: Montaje sobre Captura de pantalla del
programa NetBeans, propiedad Sun Microsystems,
bajolicenciaGNUGPLv2.
https://www.edu.xunta.es/fpadistancia/pluginfile.php/136675/mod_resource/content/1/AD02/AD02_Web/index.html
Recurso(2)
Autora:MikeBa
Licencia:CCby.
Procedencia:htt
38/38