Lección 07. Módulo Nativo node:fs.

El módulo nativo de fs (que significa File System) permite trabajar sobre archivos y directorios dentro de nuestro equipo

La importación de este módulo es:

Para archivos .js:

Copiar código
//Importacion en archivos .js
const fs = require("node:fs");

Para archivos .mjs:

Copiar código
//Importacion en archivos .mjs
import fs from "node:fs";

Nota: De la misma manera que cualquier otro módulo.

Algunas de las cosas que podemos realizar un ayuda de este módulo son:

Obtener información de archivo/directorio (síncrono)._

Algunos métodos útiles para la obtención de información del sistema de archivos son los siguientes:

Nota: Suponiendo que, contamos con un archivo llamado archivo`.txt:

Copiar código
//Obtencion sincrona de archivo
const stats = fs.statSync("./archivo.txt");

console.log(
  //Si es un fichero
  stats.isFile(),

  //Si es un directorio
  stats.isDirectory(),

  //Si es un enlace simbolico
  stats.isSymbolicLink(),

  //Tamaño en bytes
  stats.size,
);

Donde:

Obtener texto de archivo/directorio (asíncrono-callbacks)._

Para la escritura y obtención de texto en archivos, se recomienda el uso de asincronía, para la optimización de tiempo, veamos como realizar un código asíncrono con ayuda de callbacks:

Copiar código
//Importacion en archivos .js
const fs = require("node:fs")

//Primer callback
console.log("Leyendo primer archivo...");

fs.readFile("./archivo.txt", "utf-8", (err, text) => {
  console.log("Primer texto:", text);
});

//Codigo intermedio
console.log("Hacer cosas mientras lee archivo...");

//Segundo callback
console.log("Leyendo segundo archivo...");

fs.readFile("./archivo2.txt", "utf-8", (err, text) => {
  console.log("Segundo texto:", text);
});

Nota: Sin embargo, el uso de callbacks no es la mejor opción; para ello existen, ya en Node.js las promesas.

Obtener texto de archivo/directorio (asíncrono-promesas)._

Para el uso de promesas se modifica la importación, colocándose de la siguiente manera:

Copiar código
const fs = require("node:fs/promises");

Donde el código final seria:

Copiar código
//Importacion en archivos .js
const fs = require("node:fs/promises");

//Primera promesa
console.log("Leyendo primer archivo...");

fs.readFile("./archivo.txt", "utf-8")
  .then(text => {
    console.log("Primer texto:", text)
  })

//Codigo intermedio
console.log("Hacer cosas mientras lee el archivo...");

//Segunda promesa
console.log("Leyendo segundo archivo...");

fs.readFile("./archivo2.txt", "utf-8")
  .then(text => {
    console.log("Segundo texto:", text)
  })

Obtener texto de archivo/directorio (asíncrono-async-await)._

En Node.js, Async-Await solo funciona con extensiones .mjs.

Veamos como seria el código:

Copiar código
//Importacion con desestructuracion
import { readFile } from "node:fs/promises";

//Primer await
console.log("Leyendo el primer archivo...");

const text = await readFile("./archivo.txt", "utf-8");
console.log("Primer texto:", text);

//Codigo intermedio
console.log("Hacer cosas mientras lee el archivo...");

//Segundo await
console.log("Leyendo el segundo archivo...");

const secondText = await readFile("./archivo2.txt", "utf-8");
console.log("Segundo texto:", secondText);

Obtener texto de archivo/directorio (asíncrono-paralelismo)._

También podemos ejecutar paralelismo, aprovechando mejor el tiempo de respuesta:

Copiar código
import { readFile } from "node:fs/promises";

Promise.all([
  readFile("./archivo.txt", "utf-8"),
  readFile("./archivo2.txt", "utf-8")
]).then(([text, secondText]) => {
  console.log("Primer texto:", text);
  console.log("Segundo texto:", secondText);
})

Nota: Aprovechando ejecutar de manera paralela ambos procesos.

Método readdir._

El método readdir suele utilizarse para obtener un array que contiene los archivos y directorios dentro de una ruta proporcionada:

Un ejemplo de código:

Copiar código
//Importación de modulo fs
const fs = require("node:fs");

//Metodo readdir (con callback)
fs.readdir(".", (err, files) => {
  if (err) {
    console.log("Error al leer el directorio: ", err);
    return;
  }

  //ForEach de files
  files.forEach(file => {
    console.log(file);
  })
})

Nota: Este código, imprime los archivos encontrados dentro del directorio donde se encuentra el mismo archivo.