Ficheros en Node.js
Node.js proporciona varias formas de trabajar con ficheros mediante el módulo fs (File System). Esto permite leer, escribir y manipular archivos locales, tanto de forma síncrona como asíncrona.
Node.js es asíncrono por naturaleza, por lo que la mayoría de las operaciones sobre ficheros se realizan de manera no bloqueante, evitando detener el hilo principal del servidor.
Módulo fs
Para trabajar con ficheros en ES Modules, se importa así:
import fs from 'fs';
El formato CommonJS es el siguiente:
const fs = require('fs');
Leer ficheros
Lectura asíncrona (recomendado):
fs.readFile('archivo.txt', 'utf8', (err, data) => {
if (err) {
console.error('Error al leer el archivo:', err);
return;
}
console.log('Contenido del archivo:\n', data);
});
Lectura síncrona:
try {
const data = fs.readFileSync('archivo.txt', 'utf8');
console.log('Contenido del archivo:\n', data);
} catch (err) {
console.error('Error al leer el archivo:', err);
}
Escribir ficheros
Escritura asíncrona:
const contenido = 'Hola mundo\nBienvenido a Node.js';
fs.writeFile('archivo.txt', contenido, 'utf8', (err) => {
if (err) {
console.error('Error al escribir el archivo:', err);
return;
}
console.log('Archivo escrito correctamente');
});
Escritura síncrona:
try {
fs.writeFileSync('archivo.txt', contenido, 'utf8');
console.log('Archivo escrito correctamente');
} catch (err) {
console.error('Error al escribir el archivo:', err);
}
Añadir contenido a un fichero
const nuevaLinea = 'Otra línea\n';
fs.appendFile('archivo.txt', nuevaLinea, 'utf8', (err) => {
if (err) {
console.error('Error al añadir contenido:', err);
return;
}
console.log('Contenido añadido correctamente');
});
Eliminar y renombrar ficheros
// Eliminar fichero
fs.unlink('archivo.txt', (err) => {
if (err) console.error('Error al eliminar el archivo:', err);
else console.log('Archivo eliminado');
});
// Renombrar fichero
fs.rename('archivo_viejo.txt', 'archivo_nuevo.txt', (err) => {
if (err) console.error('Error al renombrar el archivo:', err);
else console.log('Archivo renombrado correctamente');
});
Trabajar con directorios
// Crear directorio
fs.mkdir('mi_directorio', (err) => {
if (err) console.error('Error al crear directorio:', err);
else console.log('Directorio creado');
});
// Listar contenido de un directorio
fs.readdir('mi_directorio', (err, archivos) => {
if (err) console.error('Error al leer directorio:', err);
else console.log('Archivos en el directorio:', archivos);
});
Buenas prácticas
- Usar métodos asíncronos para no bloquear el event loop.
- Manejar errores en los callbacks o promesas.
- Evitar leer ficheros muy grandes enteros en memoria; usar streams (
fs.createReadStream,fs.createWriteStream) para manejar datos por bloques. - Cerrar recursos cuando sea necesario (aunque Node.js lo hace automáticamente en la mayoría de casos).