En Java, los ficheros son una forma común de almacenar datos para su uso persistente. Existen dos tipos principales de ficheros: ficheros de texto y ficheros binarios. Aunque ambos sirven para almacenar información, se utilizan de manera distinta dependiendo de las necesidades de la aplicación.
En este artÃculo, exploraremos las diferencias clave entre estos tipos de ficheros, sus usos más comunes y cómo leerlos y escribirlos utilizando las clases especÃficas de Java.
Diferencias entre Ficheros de Texto y Ficheros Binarios
CaracterÃstica | Ficheros de Texto | Ficheros Binarios |
---|---|---|
Formato | Almacenan datos como texto legible por humanos. | Almacenan datos en formato binario no legible directamente. |
Ejemplos | .txt , .csv , .xml , .json | .jpg , .pdf , .docx , .dat |
Tamaño | Más grandes debido al formato textual. | Más pequeños y eficientes para datos complejos. |
Usos | Configuraciones, datos estructurados, reportes. | Imágenes, videos, bases de datos, archivos de software. |
Compatibilidad | Fácil de transferir entre sistemas y programas. | Necesita aplicaciones especÃficas para interpretación. |
Clases de Java para Manejar Ficheros
Java proporciona clases dedicadas para trabajar con ficheros de texto y binarios, que se encuentran en el paquete java.io
:
- Ficheros de Texto:
FileReader
,BufferedReader
,FileWriter
,BufferedWriter
. - Ficheros Binarios:
FileInputStream
,FileOutputStream
,DataInputStream
,DataOutputStream
.
Manejo de Ficheros de Texto
Lectura de Ficheros de Texto
Para leer un fichero de texto, es común usar BufferedReader
combinado con FileReader
. Este enfoque permite leer lÃnea por lÃnea.
Ejemplo:
import java.io.*;
public class LeerTexto {
public static void main(String[] args) {
try (BufferedReader br = new BufferedReader(new FileReader("ejemplo.txt"))) {
String linea;
while ((linea = br.readLine()) != null) {
System.out.println(linea);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Escritura en Ficheros de Texto
La clase BufferedWriter
permite escribir texto de forma eficiente, especialmente en ficheros grandes.
Ejemplo:
import java.io.*;
public class EscribirTexto {
public static void main(String[] args) {
try (BufferedWriter bw = new BufferedWriter(new FileWriter("ejemplo.txt", true))) {
bw.write("Este es un texto de ejemplo.");
bw.newLine();
System.out.println("Texto escrito correctamente.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
Manejo de Ficheros Binarios
Lectura de Ficheros Binarios
Para leer datos binarios, se utiliza FileInputStream
. Si los datos son más complejos, como tipos primitivos, se puede usar DataInputStream
.
Ejemplo con FileInputStream
:
import java.io.*;
public class LeerBinario {
public static void main(String[] args) {
try (FileInputStream fis = new FileInputStream("imagen.jpg")) {
int byteLeido;
while ((byteLeido = fis.read()) != -1) {
System.out.print(byteLeido + " ");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Escritura en Ficheros Binarios
Para escribir datos binarios, se usa FileOutputStream
. Para escribir tipos de datos más especÃficos, como int
o double
, se emplea DataOutputStream
.
Ejemplo con FileOutputStream
:
import java.io.*;
public class EscribirBinario {
public static void main(String[] args) {
try (FileOutputStream fos = new FileOutputStream("datos.bin")) {
fos.write(65); // Escribe el byte 65 (letra 'A')
fos.write(66); // Escribe el byte 66 (letra 'B')
System.out.println("Fichero binario escrito correctamente.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
Comparación Práctica: Texto vs Binario
Imagina que necesitas almacenar una lista de números. Aquà hay un ejemplo de cómo hacerlo en ambos formatos:
Almacenar como Texto
import java.io.*;
public class NumerosTexto {
public static void main(String[] args) {
try (BufferedWriter bw = new BufferedWriter(new FileWriter("numeros.txt"))) {
for (int i = 1; i <= 10; i++) {
bw.write(String.valueOf(i));
bw.newLine();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Almacenar como Binario
import java.io.*;
public class NumerosBinario {
public static void main(String[] args) {
try (DataOutputStream dos = new DataOutputStream(new FileOutputStream("numeros.bin"))) {
for (int i = 1; i <= 10; i++) {
dos.writeInt(i);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
¿Cuál DeberÃas Usar?
Usa Ficheros de Texto si:
- Los datos deben ser legibles y editables por humanos.
- Necesitas compartir los datos fácilmente entre sistemas.
Usa Ficheros Binarios si:
- Buscas eficiencia en almacenamiento y rendimiento.
- Los datos son complejos, como imágenes o estructuras de datos.
Conclusión
Comprender las diferencias y aplicaciones de los ficheros de texto y binarios es esencial para elegir la mejor solución en tus proyectos. Java facilita trabajar con ambos tipos gracias a las clases especÃficas que proporcionan flexibilidad y potencia. Con práctica, podrás dominar el manejo de ficheros y aplicar estas habilidades en diversas situaciones. ¡Manos a la obra!