como-gestionar-ficheros-nodejs

Cómo gestionar ficheros con Node.js y el módulo FS

Node.js proporciona un módulo llamado fs (file system) que nos permite interactuar con el sistema de archivos del servidor.

Este módulo nos brinda una todas las funciones que necesitamos para realizar operaciones como leer, escribir, modificar y eliminar archivos y directorios.

Al leer y escribir archivos, es importante especificar la codificación correcta. Por ejemplo, utf8. Si trabajamos con archivos binarios, como imágenes o archivos comprimidos, debemos omitir la codificación para obtener los datos sin modificar.

Por otro lado, para archivos grandes, es recomendable utilizar el módulo streams de Node.js en lugar de cargar todo el contenido en memoria. Lo veremos en el próximo artículo Cómo trabajar con streams

Funciones del módulo FS

Vamos a ver algunas de las funciones más importantes del módulo fs, junto con ejemplos prácticos de cómo utilizarlas.

Verificar si un archivo existe

La primera tarea que a menudo necesitamos realizar es verificar la existencia de un archivo. Para ello, utilizamos la función access, la cual nos permite comprobar si un archivo existe y tenemos permisos para acceder a él.

import { access } from 'node:fs';

access('archivo.txt', (err) => {
  if (err) {
    console.error('El archivo no existe');
    return;
  }
  
  console.log('El archivo existe');
});

Copiar un archivo

Para realizar una copia de un archivo existente utilizamos la función copyFile, que toma el nombre del archivo de origen y el nombre del archivo de destino como parámetros.

import { copyFile } from 'node:fs';

copyFile('origen.txt', 'destino.txt', (err) => {
  if (err) throw err;
  
  console.log('Archivo copiado exitosamente');
});

Mover un archivo

Para cambiar el nombre o la ubicación de un archivo, utilizamos la función rename. Esto nos permite mover un archivo de una ubicación a otra o simplemente cambiar su nombre.

import { rename } from 'node:fs';

rename('antiguo.txt', 'nuevo.txt', (err) => {
  if (err) throw err;
  
  console.log('Archivo movido exitosamente');
});

Borrar un archivo

Para eliminar un archivo de manera programática utilizamos la función unlink, la cual nos permite borrar un archivo del sistema de archivos.

import { unlink } from 'node:fs';

unlink('archivo.txt', (err) => {
  if (err) throw err;
  
  console.log('Archivo borrado exitosamente');
});

Lectura de archivo de texto

Supongamos que tenemos un archivo llamado datos.txt con el siguiente contenido:

Este es un archivo de ejemplo.
Contiene algunas líneas de texto.

El siguiente código en Node.js nos permitirá leer este archivo:

import { readFile } from 'node:fs';

fs.readFile('datos.txt', 'utf8', (err, data) => {
  if (err) {
    console.error('Error al leer el archivo:', err);
    return;
  }
  
  console.log('Contenido del archivo:');
  console.log(data);
});

En este ejemplo, fs.readFile() toma tres argumentos: el nombre del archivo (datos.txt), la codificación (utf8 para texto) y una función de callback que se ejecuta una vez que se completa la lectura. Si la lectura es exitosa, el contenido del archivo se imprime en la consola.

Lectura de archivo de binario

Supongamos que tenemos un archivo llamado datos.txt pero como binario, sus bytes.

import { readFile } from 'node:fs';

fs.readFile('datos.txt',(err, data) => {
  if (err) {
    console.error('Error al leer el archivo:', err);
    return;
  }
  
  console.log('Contenido del archivo:');
  console.log(data);
});

Añadir una línea a un archivo

Para añadir contenido a un archivo existente, como por ejemplo agregar una nueva línea, utilizamos la función appendFile.

import { appendFile } from 'node:fs';

const nuevaLinea = 'Nueva línea a añadir';

appendFile('archivo.txt', `${nuevaLinea}\n`, (err) => {
  if (err) throw err;
  
  console.log('Línea añadida al archivo');
});

Crear un nuevo archivo y escribir en él

Para crear un nuevo archivo y escribir contenido en él, utilizamos la función writeFile.

import { writeFile } from 'node:fs';

const contenido = 'Contenido del nuevo archivo';

writeFile('nuevo.txt', contenido, (err) => {
  if (err) throw err;
  
  console.log('Nuevo archivo creado y contenido escrito');
});

Descarga el código

Todo el código de esta entrada está disponible para su descarga en Github github-full