Tarea 12: Escritura de Datos Primitivos con DataOutputStream
Explicación del Ejercicio
En esta tarea se guardan en un fichero binario los datos de varios módulos de 2º DAM utilizando DataOutputStream, que permite escribir tipos primitivos de Java y cadenas directamente, sin convertirlos a bytes manualmente.
Conceptos y métodos clave:
-
Flujo de datos (
DataOutputStream): Envuelve a unFileOutputStreamy añade métodos para cada tipo de dato. -
Cadenas (
writeUTF()): Guarda el texto en formato UTF precedido de 2 bytes que indican su longitud, por lo que cada registro tiene un tamaño variable. -
Números (
writeInt()ywriteDouble()): Escriben 4 y 8 bytes respectivamente. -
Arrays paralelos: Los nombres, las horas y las notas están en tres arrays con el mismo índice, y un bucle
forescribe los tres datos de cada módulo en el mismo orden. - Tamaño del fichero: Los 201 bytes resultan de sumar el texto de los 5 nombres (131 bytes, con las tildes contando doble), los 10 bytes de longitud de las cadenas y los 60 bytes de los 5 pares int + double.
Código Fuente y Salida
Clase11.java
package ClaseFile;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* @author Eva Gallardo Romero
* @date 28 de sep de 2026
* Guardar en el fichero binario "modulos.dat" los datos de varios módulos
* de 2º DAM utilizando DataOutputStream. Por cada módulo se escribe:
* - Nombre (writeUTF)
* - Horas semanales (writeInt)
* - Nota (writeDouble)
*/
public class Clase11 {
public static void main(String[] args) {
// objeto File del fichero de datos
File fichero = new File("modulos.dat");
// arrays con los datos que voy a guardar
String[] nombres = {"Acceso a Datos", "Desarrollo de Interfaces", "Programación de Servicios y Procesos",
"Sistemas de Gestión Empresarial", "Programación Multimedia"};
int[] horas = {6, 6, 3, 5, 5};
double[] notas = {8.5, 7.25, 9.0, 6.75, 8.0};
// DataOutputStream envuelve al FileOutputStream para escribir tipos primitivos
try (DataOutputStream dos = new DataOutputStream(new FileOutputStream(fichero))) {
for (int i = 0; i < nombres.length; i++) {
dos.writeUTF(nombres[i]);
dos.writeInt(horas[i]);
dos.writeDouble(notas[i]);
System.out.println("Escrito: " + nombres[i] + " | " + horas[i] + " h | " + notas[i]);
}
} catch (IOException e) {
System.out.println("Error al escribir: " + e.getMessage());
}
System.out.println("Tamaño del fichero: " + fichero.length() + " bytes");
}
}
Resultado Mostrado por Terminal
Salida de Consola
Escrito: Acceso a Datos | 6 h | 8.5
Escrito: Desarrollo de Interfaces | 6 h | 7.25
Escrito: Programación de Servicios y Procesos | 3 h | 9.0
Escrito: Sistemas de Gestión Empresarial | 5 h | 6.75
Escrito: Programación Multimedia | 5 h | 8.0
Tamaño del fichero: 201 bytes