Tema 6 Programación
Tema 6 Programación
id=36300
Almacenando datos.
Caso práctico
Precisamente Antonio, que cada vez está más entusiasmado con la idea de estudiar
algún ciclo, de momento, está matriculado y cursando el módulo de Programación, y
está repasando para el examen que tiene la semana que viene, uno de los temas que
le "cae" es precisamente el de almacenamiento de información en ficheros.
https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300 1/44
11/1/2021 https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300
1.- Introducción.
Cuando desarrollas programas, en la mayoría de ellos los usuarios pueden
pedirle a la aplicación que realice cosas y pueda suministrarle datos con los
que se quiere hacer algo. Una vez introducidos los datos y las órdenes, se
espera que el programa manipule de alguna forma esos datos, para
proporcionar una respuesta a lo solicitado.
Por tanto, sabemos que el almacenamiento en variables o vectores (arrays) es temporal, los datos
se pierden en las variables cuando están fuera de su ámbito o cuando el programa termina. Las
computadoras utilizan ficheros para guardar los datos, incluso después de que el programa
termine su ejecución. Se suele denominar a los datos que se guardan en ficheros datos
persistentes, porque existen, persisten más allá de la ejecución de la aplicación. Los ordenadores
almacenan los ficheros en unidades de almacenamiento secundario como discos duros, discos
ópticos, etc. En esta unidad veremos cómo hacer con Java estas operaciones de crear, actualizar y
procesar ficheros.
A todas estas operaciones, que constituyen un flujo de información del programa con el exterior, se
les conoce como Entrada/Salida (E/S).
Distinguimos dos tipos de E/S: la E/S estándar que se realiza con el terminal del usuario y la E/S a
través de ficheros, en la que se trabaja con ficheros de disco.
Todas las operaciones de E/S en Java vienen proporcionadas por el paquete estándar del API de
Java denominado java.io que incorpora interfaces, clases y excepciones para acceder a todo tipo
de ficheros.
Entrada y Salida.
https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300 2/44
11/1/2021 https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300
1.1.- Excepciones.
Cuando se trabaja con archivos, es normal que pueda haber errores,
por ejemplo: podríamos intentar leer un archivo que no existe, o
podríamos intentar escribir en un archivo para el que no tenemos
permisos de escritura. Para manejar todos estos errores debemos
utilizar excepciones. Las dos excepciones más comunes al manejar
archivos son:
Autoevaluación
En el siguiente enlace hay un manual muy interesante de Java. Puedes consultar desde
el índice, más información sobre las excepciones en Java.
Excepciones en Java.
https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300 3/44
11/1/2021 https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300
https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300 4/44
11/1/2021 https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300
Un flujo es una abstracción de aquello que produzca o consuma información. Es una entidad lógica.
Las clases y métodos de E/S que necesitamos emplear son las mismas independientemente del
dispositivo con el que estemos actuando, luego, el núcleo de Java, sabrá si tiene que tratar con
el teclado, el monitor, un sistema de archivos o un socket de red liberando al programador de tener
que saber con quién está interactuando.
En resumen, será el flujo el que tenga que comunicarse con el sistema operativo concreto y
"entendérselas" con él. De esta manera, no tenemos que cambiar absolutamente nada en
nuestra aplicación, que va a ser independiente tanto de los dispositivos físicos de almacenamiento
como del sistema operativo sobre el que se ejecuta. Esto es primordial en un lenguaje
multiplataforma y tan altamente portable como Java.
Autoevaluación
https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300 5/44
11/1/2021 https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300
https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300 6/44
11/1/2021 https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300
Las clases del paquete java.io se pueden ver en la ilustración. Destacamos las clases relativas a
flujos:
Destacar que hay clases que se "montan" sobre otros flujos para modificar la forma de
trabajar con ellos. Por ejemplo, con BufferedInputStream podemos añadir un buffer a un flujo
FileInputStream, de manera que se mejore la eficiencia de los accesos a los dispositivos en los que
se almacena el fichero con el que conecta el flujo.
Debes conocer
https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300 7/44
11/1/2021 https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300
https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300 8/44
11/1/2021 https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300
El método nextToken devuelve un int que indica el tipo de token leído. Hay una serie de constantes
definidas para determinar el tipo de token:
En el código de la clase, apreciamos que se iterará hasta llegar al fin del fichero. Para cada token,
se mira su tipo, y según el tipo se incrementa el contador de palabras o de números.
Autoevaluación
https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300 9/44
11/1/2021 https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300
4.- Flujos.
Hemos visto qué es un flujo y que existe un árbol de clases amplio para su manejo. Ahora vamos a
ver en primer lugar los flujos predefinidos, también conocidos como de entrada y salida, y
después veremos los flujos basados en bytes y los flujos basados en carácter.
Antes, hemos mencionado Unicode. Puedes consultar el origen y más cosas sobre
Unicode, en el enlace de la Wikipedia:
Acerca de Unicode.
https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300 10/44
11/1/2021 https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300
Stdin. Es un objeto de tipo InputStream, y está definido en la clase System como flujo de
entrada estándar. Por defecto es el teclado, pero puede redirigirse para cada host o cada
usuario, de forma que se corresponda con cualquier otro dispositivo de entrada.
Stdout. System.out implementa stdout como una instancia de la clase PrintStream.
Se pueden utilizar los métodos print() y println() con cualquier tipo básico Java como
argumento.
Stderr. Es un objeto de tipo PrintStream. Es un flujo de salida definido en la clase
System y representa la salida de error estándar. Por defecto, es el monitor, aunque es
posible redireccionarlo a otro dispositivo de salida.
int System.in.read();
Lee el siguiente byte (char) de la entrada estándar.
int System.in.read(byte[] b);
Leer un conjunto de bytes de la entrada estándar y lo almacena en el vector b.
System.out.print(String);
Muestra el texto en la consola.
System.out.println(String);
Muestra el texto en la consola y seguidamente efectúa un salto de línea.
Normalmente, para leer valores numéricos, lo que se hace es tomar el valor de la entrada
estándar en forma de cadena y entonces usar métodos que permiten transformar el texto a
números (int, float, double, etc.) según se requiera.
Funciones de conversión.
Método Funcionamiento
https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300 11/44
11/1/2021 https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300
Método Funcionamiento
boolean
Convierte una cadena en un valor lógico
Boolean.parseBoolean(String)
https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300 12/44
11/1/2021 https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300
Autoevaluación
Stderr por defecto dirige al monitor pero se puede direccional a otro dispositivo.
Debes conocer
En este vídeo puedes ver un ejemplo sencillo y explicado sobre la gestión de las
excepciones en Java.
https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300 13/44
11/1/2021 https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300
https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300 14/44
11/1/2021 https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300
Recomendación
FileInputStream. FileOutputStream.
https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300 16/44
11/1/2021 https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300
Hay que recordar que cada vez que se llama a un constructor se abre el flujo de datos y es
necesario cerrarlo cuando no lo necesitemos.
Existen muchos tipos de flujos dependiendo de la utilidad que le vayamos a dar a los datos que
extraemos de los dispositivos.
Un flujo puede ser envuelto por otro flujo para tratar el flujo de datos de forma cómoda. Así,
un bufferWriter nos permite manipular el flujo de datos como un buffer, pero si lo envolvemos en
un PrintWriter lo podemos escribir con muchas más funcionalidades adicionales para diferentes
tipos de datos.
En este ejemplo de código, se ve cómo podemos escribir la salida estándar a un fichero. Cuando se
teclee la palabra "salir", se dejará de leer y entonces se saldrá del bucle de lectura.
Podemos ver cómo se usa InputStreamReader que es un puente de flujos de bytes a flujos de
caracteres: lee bytes y los decodifica a caracteres. BufferedReader lee texto de un flujo de entrada
de caracteres, permitiendo efectuar una lectura eficiente de caracteres, vectores y líneas.
Como vemos en el código, usamos FileWriter para flujos de caracteres, pues para datos binarios
se utiliza FileOutputStream.
Autoevaluación
https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300 17/44
11/1/2021 https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300
Para flujos de caracteres es mejor usar las clases Reader y Writer en vez de
InputStream y OutputStream.
Verdadero. Falso.
https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300 18/44
11/1/2021 https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300
c:\\datos\Programacion\fichero.txt
Para evitar problemas en la ejecución de los programas cuando se ejecuten en uno u otro sistema
operativo, y por tanto persiguiendo que nuestras aplicaciones sean lo más portables posibles, se
recomienda usar en Java: File.separator.
Podríamos hacer una función que al pasarle una ruta nos devolviera la adecuada según el
separador del sistema actual, del siguiente modo:
Autoevaluación
https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300 19/44
11/1/2021 https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300
¿Crees que es una buena opción la que piensa María o utilizarías otra en su lugar?
En este apartado vas a ver muchas cosas sobre los ficheros: cómo leer y escribir en ellos, aunque
ya hemos visto algo sobre eso, hablaremos de las formas de acceso a los ficheros: secuencial o de
manera aleatoria.
Siempre hemos de tener en cuenta que la manera de proceder con ficheros debe ser:
También es muy importante el control de las excepciones, para evitar que se produzcan fallos en
tiempo de ejecución. Si intentamos abrir sin más un fichero, sin comprobar si existe o no, y no
existe, saltará una excepción.
Necesitas conocer...
Debes conocer la página web Acepta el Reto que es una web dónde existen una gran colección
de problemas de programación con un juez on-line que validará tus envíos. Hay problemas de
todo po, te servirán prac car y poner a prueba tus habilidades en Java. En cuanto le cojas el
truquillo al juez online, te vas a diver r… así que… acepta el reto.
Extensión de un archivo.
https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300 20/44
11/1/2021 https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300
Otra cosa a considerar, cuando se va a hacer uso de ficheros, es la forma de acceso al fichero que
se va a utilizar, si va a ser de manera secuencial o bien aleatoria. En un fichero secuencial, para
acceder a un dato debemos recorrer todo el fichero desde el principio hasta llegar a su
posición. Sin embargo, en un fichero de acceso aleatorio podemos posicionarnos directamente en
una posición del fichero, y ahí leer o escribir.
Aunque ya has visto un ejemplo que usa BufferedReader, insistimos aquí sobre la filosofía de estas
clases, que usan la idea de un buffer.
La idea es que cuando una aplicación necesita leer datos de un fichero, tiene que estar esperando
a que el disco en el que está el fichero le proporcione la información.
Un dispositivo cualquiera de memoria masiva, por muy rápido que sea, es mucho más lento que la
CPU del ordenador.
Así que, es fundamental reducir el número de accesos al fichero a fin de mejorar la eficiencia de
la aplicación, y para ello se asocia al fichero una memoria intermedia, el buffer, de modo que
cuando se necesita leer un byte del archivo, en realidad se traen hasta el buffer asociado al flujo, ya
que es una memoria mucho más rápida que cualquier otro dispositivo de memoria masiva.
Cualquier operación de Entrada/Salida a ficheros puede generar una IOException, es decir, un error
de Entrada/Salida. Puede ser por ejemplo, que el fichero no exista, o que el dispositivo no funcione
correctamente, o que nuestra aplicación no tenga permisos de lectura o escritura sobre el fichero en
cuestión. Por eso, las sentencias que involucran operaciones sobre ficheros, deben ir en un bloque
try.
https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300 21/44
11/1/2021 https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300
Autoevaluación
https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300 22/44
11/1/2021 https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300
En la siguiente porción de código puedes ver cómo para un fichero existente, que en este caso es
texto.txt, averiguamos la codificación que posee, usando el método getEncoding()
Para archivos de texto, se puede abrir el fichero para leer usando la clase FileReader. Esta clase
nos proporciona métodos para leer caracteres. Cuando nos interese no leer carácter a carácter,
sino leer líneas completas, podemos usar la clase BufferedReader a partir de FileReader. Lo
podemos hacer de la siguiente forma:
Si el fichero al que queremos escribir existe y lo que queremos es añadir información, entonces
pasaremos el segundo parámetro como true:
https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300 23/44
11/1/2021 https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300
FileWriter("c:/fich2.txt",true);
Código Ascii.
https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300 24/44
11/1/2021 https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300
Para leer datos de un fichero binario, Java proporciona la clase FileInputStream. Dicha clase
trabaja con bytes que se leen desde el flujo asociado a un fichero. Aquí puedes ver un ejemplo
comentado.
Para escribir datos a un fichero binario, la clase nos permite usar un fichero para escritura de
bytes en él, es la clase FileOutputStream. La filosofía es la misma que para la lectura de datos, pero
ahora el flujo es en dirección contraria, desde la aplicación que hace de fuente de datos hasta el
fichero, que los consume.
En la siguiente presentación puedes ver un esquema de cómo utilizar buffer para optimizar la
lectura de teclado desde consola, por medio de las envolturas, podemos usar métodos como
readline(), de la clase BufferedReader, que envuelve a un objeto de la clase InputStreamReader.
Autoevaluación
https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300 25/44
11/1/2021 https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300
Así, el programador definirá su registro con el número de bytes que le interesen, moviéndose luego
por el fichero teniendo en cuenta ese tamaño que ha definido.
Se dice que un fichero es de acceso directo o de organización directa cuando para acceder a un
registro n cualquiera, no se tiene que pasar por los n-1 registros anteriores. En caso contrario,
estamos hablando de ficheros secuenciales.
Con Java se puede trabajar con ficheros secuenciales y con ficheros de acceso aleatorio.
Autoevaluación
https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300 26/44
11/1/2021 https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300
Fíjate al ver el código, que hemos tenido la precaución de ir escribiendo las cadenas de caracteres
con el mismo tamaño, de manera que sepamos luego el tamaño del registro que tenemos que leer.
Por tanto para buscar información en un fichero secuencial, tendremos que abrir el fichero e ir
leyendo registros hasta encontrar el registro que buscamos.
Autoevaluación
https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300 27/44
11/1/2021 https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300
La clase RandomAccessFile implementa los interfaces DataInput y DataOutput. Para abrir un archivo
en modo lectura haríamos:
Esta clase permite leer y escribir sobre el fichero, no se necesitan dos clases diferentes.
Hay que especificar el modo de acceso al construir un objeto de esta clase: sólo lectura o
lectura/escritura.
Dispone de métodos específicos de desplazamiento como seek y skipBytes para poder moverse de
un registro a otro del fichero, o posicionarse directamente en una posición concreta del fichero.
En la siguiente presentación vemos cómo crear un fichero, cómo podemos acceder, y actualizar
información en él.
https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300 28/44
11/1/2021 https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300
Autoevaluación
https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300 29/44
11/1/2021 https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300
Caso práctico
Antonio ha quedado con Ana para estudiar sobre el tema de ficheros. De camino a la
biblioteca, Ana le pregunta a Antonio -¿Crees que los ficheros se utilizan realmente, o
ya están desfasados y sólo se utilizan las bases de datos? -Antonio tras pensarlo un
momento le dice a Ana -Yo creo que sí, piensa en el mp3 que usas muchas veces, la
música va grabada en ese tipo de ficheros.
Las fotos que haces con tu cámara digital, o con el móvil, se guardan en
ficheros. Así, existe una gran cantidad de ficheros de imagen, según el
método que usen para guardar la información. Por ejemplo, tenemos los
ficheros de extensión: .jpg, .tiff, gif, .bmp, etc.
Los sistemas operativos, como Linux, Windows, etc., están constituidos por un montón de
instrucciones e información que se guarda en ficheros.
El propio código fuente de los lenguajes de programación, como Java, C, etc., se guarda en
ficheros de texto plano la mayoría de veces.
Y por supuesto, se usan mucho actualmente los ficheros XML, que al fin y al cabo son ficheros de
texto plano, pero que siguen una estructura determinada. XML se emplea mucho para el
intercambio de información estructurada entre diferentes plataformas.
https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300 30/44
11/1/2021 https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300
Formato mp3.
Autoevaluación
https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300 31/44
11/1/2021 https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300
Ahora veremos cómo hacer estas cosas, y también como borrar ficheros,
y crearlos, aunque crearlos ya lo hemos visto en algunos ejemplos
anteriores.
https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300 32/44
11/1/2021 https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300
El archivo correspondiente a un nombre dado podría ser que no existiera, por ello, habrá que
controlar las posibles excepciones.
A través del objeto File, un programa puede examinar los atributos del archivo, cambiar su nombre,
borrarlo o cambiar sus permisos. Dado un objeto file, podemos hacer las siguientes operaciones
con él:
https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300 33/44
11/1/2021 https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300
Autoevaluación
https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300 34/44
11/1/2021 https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300
Así, nos puede interesar un filtro para ver los ficheros modificados
después de una fecha, o los que tienen un tamaño mayor del que
indiquemos, etc.
Este método devolverá verdadero (true), en el caso de que el fichero cuyo nombre se indica en el
parámetro nombre aparezca en la lista de los ficheros del directorio indicado por el parámetro dir.
En el siguiente ejemplo vemos cómo se listan los ficheros de la carpeta c:\datos que tengan la
extensión .odt. Usamos try y catch para capturar las posibles excepciones, como que no exista
dicha carpeta.
Autoevaluación
https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300 35/44
11/1/2021 https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300
Creamos el objeto que encapsula el fichero, por ejemplo, suponiendo que vamos a crear un
fichero llamado miFichero.txt, en la carpeta C:\\prueba, haríamos:
A partir del objeto File creamos el fichero físicamente, con la siguiente instrucción, que
devuelve un boolean con valor true si se creó correctamente, o false si no se pudo crear:
fichero.createNewFile()
Para borrar un fichero, podemos usar la clase File, comprobando previamente si existe, del
siguiente modo:
fichero.delete();
Para borrar un directorio con Java tenemos que borrar cada uno de los ficheros y directorios que
éste contenga. Al poder almacenar otros directorios, se podría recorrer recursivamente el directorio
para ir borrando todos los ficheros.
https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300 36/44
11/1/2021 https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300
https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300 37/44
11/1/2021 https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300
Todos los tipos primitivos en Java son serializables por defecto. (Al igual que los arrays y otros
muchos tipos estándar).
Para leer y escribir objetos serializables a un stream se utilizan las clases java: ObjectInputStream y
ObjectOutputStream.
En el siguiente ejemplo se puede ver cómo leer un objeto serializado que se guardó antes. En este
caso, se trata de un String serializado:
Así vemos que readObject lee un objeto desde el flujo de entrada fich. Cuando se leen objetos
desde un flujo, se debe tener en cuenta qué tipo de objetos se esperan en el flujo, y se han de leer
en el mismo orden en que se guardaron.
Autoevaluación
https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300 38/44
11/1/2021 https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300
https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300 39/44
11/1/2021 https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300
El método writeObject se utiliza para guardar un objeto a través de un flujo de salida. El objeto
pasado a writeObject debe implementar el interfaz Serializable.
Una vez que se ha personalizado el bean, para guardarlo, se emplea la serialización: se almacena
el objeto con el valor de sus campos en un fichero con extensión .ser, que suele emplazarse dentro
de un fichero .jar.
En este enlace a puedes ver un vídeo en el que se crea una aplicación sobre
serialización. No está hecha con NetBeans, sino con Eclipse, pero eso no presenta
ningún inconveniente.
https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300 40/44
11/1/2021 https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300
Serialización en Java
https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300 41/44
11/1/2021 https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300
Autoría: David.nikonvscanon.
Licencia: CC-by.
Procedencia:
http://www.flickr.com/photos/nikonvscanon/2081397439/
Autoría: Macglee.
Licencia: CC-by-sa.
Procedencia:
http://www.flickr.com/photos/macglee/4795368373/
Autoría: Paulnasca
Licencia: Dominio público.
Procedencia:
http://es.wikipedia.org/wiki/Archivo:Binary_file.png
Autoría: Paubou.
Licencia: CC-by-nc-sa.
Procedencia:
http://www.flickr.com/photos/paubou/2516489783/
https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300 42/44
11/1/2021 https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300
https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300 43/44
11/1/2021 https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300
https://avanza.educarex.es/cursos/blocks/recopila/recopila.php?id=36300 44/44