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:
//Importacion en archivos .js
const fs = require("node:fs");Para archivos .mjs:
//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:
//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:
isFile() -> Devuelve un boolean sobre si es un fichero.
isDirectory() -> Devuelve un boolean sobre si es un directorio.
isSymbolicLink() -> Devuelve un boolean sobre si es un enlace simbolico.
size -> Devuelve el tamaño en bytes.
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:
//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:
const fs = require("node:fs/promises");Donde el código final seria:
//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:
//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:
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:
//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.