{"id":54117,"date":"2022-07-12T09:20:02","date_gmt":"2022-07-12T07:20:02","guid":{"rendered":"https:\/\/kinsta.com\/es\/?p=54117&#038;post_type=knowledgebase&#038;preview_id=54117"},"modified":"2025-10-01T21:32:05","modified_gmt":"2025-10-01T19:32:05","slug":"nodejs-fs","status":"publish","type":"post","link":"https:\/\/kinsta.com\/es\/blog\/nodejs-fs\/","title":{"rendered":"Entender el M\u00f3dulo del Sistema de Archivos de Node.js (FS)"},"content":{"rendered":"<p>JavaScript ha sido durante mucho tiempo uno de los lenguajes de scripting m\u00e1s populares, pero durante un largo periodo de tiempo, no fue una gran opci\u00f3n para el desarrollo de aplicaciones de backend del lado del servidor. Entonces lleg\u00f3 Node.js, que se utiliza para crear aplicaciones ligeras del lado del servidor, basadas en eventos, construidas con el lenguaje de programaci\u00f3n JavaScript.<\/p>\n<p>Node.js <a href=\"https:\/\/kinsta.com\/es\/blog\/que-es-node-js\/\" rel=\"noopener\">es un tiempo de ejecuci\u00f3n de JavaScript de c\u00f3digo abierto<\/a> que se puede descargar e instalar gratuitamente en cualquiera de los principales sistemas operativos (Windows, Mac, Linux). En los \u00faltimos a\u00f1os se ha hecho cada vez m\u00e1s <a href=\"https:\/\/kinsta.com\/es\/blog\/node-js-aplicaciones\/\" rel=\"noopener\">popular entre los creadores de aplicaciones<\/a>, y ha proporcionado <a href=\"https:\/\/kinsta.com\/es\/blog\/salario-desarrolladores-node-js\/\" rel=\"noopener\">muchas nuevas oportunidades de empleo<\/a> para los desarrolladores de JavaScript que buscan una especialidad.<\/p>\n\n<p>En este art\u00edculo, aprenderemos a gestionar el sistema de archivos utilizando Node.js. Es f\u00e1cil utilizar las API de Node.js para interactuar con el sistema de archivos y realizar muchas operaciones complejas, y saber c\u00f3mo maniobrar con ellas aumentar\u00e1 tu productividad.<\/p>\n<p>\u00a1Vamos a sumergirnos!<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Requisitos previos para entender el sistema de archivos de Node.js<\/h2>\n<p>El principal requisito previo es la instalaci\u00f3n de Node.js en tu sistema operativo. Node.js no requiere ning\u00fan hardware complejo para funcionar, por lo que es f\u00e1cil <a href=\"https:\/\/kinsta.com\/es\/blog\/como-instalar-node-js\/\" rel=\"noopener\">descargar e instalar Node.js<\/a> en tu ordenador.<\/p>\n<p>Ser\u00eda \u00fatil que tambi\u00e9n tuvieras <a href=\"https:\/\/kinsta.com\/es\/blog\/que-es-javascript\/\" rel=\"noopener\">conocimientos b\u00e1sicos de JavaScript<\/a> para trabajar con m\u00f3dulos de Node.js como los sistemas de archivos (tambi\u00e9n conocidos como \u00abFS\u00bb o \u00abfs\u00bb). Una comprensi\u00f3n de alto nivel de las funciones de JavaScript, las funciones de devoluci\u00f3n de llamada y las promesas te <a href=\"https:\/\/kinsta.com\/es\/blog\/mejor-lenguaje-de-programacion-para-aprender\/#javascript\" rel=\"noopener\">ayudar\u00e1n a dominar este tema<\/a> a\u00fan m\u00e1s r\u00e1pido.<\/p>\n<h2>M\u00f3dulo del Sistema de Archivos de Node.js<\/h2>\n<p>Trabajar con archivos y directorios es una de las necesidades b\u00e1sicas de una aplicaci\u00f3n full-stack. Tus usuarios pueden querer subir im\u00e1genes, curr\u00edculos u otros archivos a un servidor. Al mismo tiempo, tu aplicaci\u00f3n puede necesitar leer archivos de configuraci\u00f3n, mover archivos o incluso cambiar sus permisos mediante programaci\u00f3n.<\/p>\n<p>El m\u00f3dulo del sistema de archivos de Node.js tiene todo esto cubierto. Proporciona varias API para interactuar con los sistemas de archivos sin problemas. La mayor\u00eda de las API son personalizables con opciones y banderas. Tambi\u00e9n puedes utilizarlas para realizar operaciones de archivo tanto s\u00edncronas como as\u00edncronas.<\/p>\n<p>Antes de sumergirnos en el m\u00f3dulo del sistema de archivos, echemos un vistazo a lo que es el m\u00f3dulo Node.js.<\/p>\n<h3>M\u00f3dulos Node.js<\/h3>\n<p>Los m\u00f3dulos de Node.js son un conjunto de funcionalidades disponibles como APIs para que las utilice un programa consumidor. Por ejemplo, tienes el m\u00f3dulo <code>fs<\/code> para interactuar con el sistema de archivos. Asimismo, un m\u00f3dulo <code>http<\/code> utiliza sus funciones para crear un servidor y muchas m\u00e1s operaciones. Node.js ofrece un mont\u00f3n de m\u00f3dulos para abstraer muchas funcionalidades de bajo nivel por ti.<\/p>\n<p>Tambi\u00e9n puedes crear tus propios m\u00f3dulos. A partir de la versi\u00f3n 14 de Node.js, puedes crear y utilizar los m\u00f3dulos de Node.js de dos maneras: M\u00f3dulos CommonJS (CJS) y m\u00f3dulos ESM (MJS). Todos los ejemplos que veremos en este art\u00edculo son del estilo CJS.<\/p>\n<h2>Trabajar con archivos en Node.js<\/h2>\n<p>Trabajar con archivos implica varias operaciones con archivos y directorios (carpetas). Ahora aprenderemos sobre cada una de estas operaciones con c\u00f3digo fuente de ejemplo. Por favor, abre tu <a href=\"https:\/\/kinsta.com\/es\/blog\/herramientas-de-revision-de-codigo\/\">editor de c\u00f3digo fuente<\/a> favorito y pru\u00e9balos mientras lees.<\/p>\n<p>Primero, importa el m\u00f3dulo <code>fs<\/code> a tu archivo fuente para empezar a trabajar con los m\u00e9todos del sistema de archivos. En el estilo CJS, utilizamos el m\u00e9todo <code>require<\/code> para importar un m\u00e9todo de un m\u00f3dulo. As\u00ed, para importar y utilizar los m\u00e9todos del m\u00f3dulo fs, har\u00edas lo siguiente<\/p>\n<pre><code class=\"language-js\">const { writeFile } = require('fs\/promises');<\/code><\/pre>\n<p>Adem\u00e1s, ten en cuenta que estamos importando el m\u00e9todo <code>writeFile<\/code> del paquete <code>fs\/promises<\/code>. Queremos utilizar los m\u00e9todos promisorios, ya que son los m\u00e1s recientes, y son f\u00e1ciles de usar con las palabras clave async\/await y con menos c\u00f3digo. Otras alternativas son los m\u00e9todos s\u00edncronos y las funciones de devoluci\u00f3n de llamada que veremos m\u00e1s adelante.<\/p>\n<h3>\u00bfC\u00f3mo Cambiar el T\u00edtulo del Sitio de WordPress? (5 M\u00e9todos Sencillos)C\u00f3mo crear y escribir en un archivo<\/h3>\n<p>Puedes crear y escribir en un archivo de tres maneras:<\/p>\n<ol>\n<li>Utilizando el m\u00e9todo <code>writeFile<\/code><\/li>\n<li>Utilizando el m\u00e9todo <code>appendFile<\/code><\/li>\n<li>Utilizaci\u00f3n del m\u00e9todo <code>openFile<\/code><\/li>\n<\/ol>\n<p>Estos m\u00e9todos aceptan una ruta de archivo y los datos como contenido a escribir en el archivo. Si el archivo existe, sustituyen el contenido del archivo. Si no, se crea un nuevo archivo con el contenido.<\/p>\n<h4>1. Uso del m\u00e9todo writeFile<\/h4>\n<p>El siguiente fragmento de c\u00f3digo muestra el uso del m\u00e9todo <code>writeFile<\/code>. Empieza por crear un archivo llamado <strong>createFile.js<\/strong> utilizando el fragmento de c\u00f3digo que aparece a continuaci\u00f3n:<\/p>\n<pre><code class=\"language-js\">const { writeFile } = require('fs\/promises');\nasync function writeToFile(fileName, data) {\n  try {\n    await writeFile(fileName, data);\n    console.log(`Wrote data to ${fileName}`);\n  } catch (error) {\n    console.error(`Got an error trying to write the file: ${error.message}`);\n  }\n}<\/code><\/pre>\n<p>Ten en cuenta que estamos utilizando la palabra clave <code>await<\/code> para invocar el m\u00e9todo, ya que devuelve una promesa de JavaScript. Una promesa exitosa crear\u00e1\/escribir\u00e1 en el archivo. Tenemos un bloque try-catch para manejar los errores en caso de que la promesa sea rechazada.<\/p>\n<p>Ahora podemos invocar la funci\u00f3n <code>writeToFile<\/code>:<\/p>\n<pre><code class=\"language-js\">writeToFile('friends.txt', 'Bob');<\/code><\/pre>\n<p>A continuaci\u00f3n, abre un s\u00edmbolo del sistema o un terminal y ejecuta el programa anterior con el siguiente comando:<\/p>\n<pre><code class=\"language-bash\">node createFile.js<\/code><\/pre>\n<p>Se crear\u00e1 un nuevo archivo llamado <strong>amigos.txt<\/strong> con una l\u00ednea que diga simplemente<\/p>\n<pre><code class=\"language-html\">Bob<\/code><\/pre>\n<h4>2. Uso del m\u00e9todo appendFile<\/h4>\n<p>Como su nombre indica, el uso principal de este m\u00e9todo es a\u00f1adir y editar un archivo. Sin embargo, tambi\u00e9n puedes utilizar el mismo m\u00e9todo para crear un archivo.<\/p>\n<p>Echa un vistazo a la siguiente funci\u00f3n. Utilizamos el m\u00e9todo <code>appendFile<\/code> con la bandera <code>w<\/code> para escribir un archivo. La bandera por defecto para a\u00f1adir a un archivo es <code>a<\/code>:<\/p>\n<pre><code class=\"language-js\">const { appendFile} = require('fs\/promises');\n\nasync function appendToFile(fileName, data) {\n  try {\n    await appendFile(fileName, data, { flag: 'w' });\n    console.log(`Appended data to ${fileName}`);\n  } catch (error) {\n    console.error(`Got an error trying to append the file: {error.message}`);\n  }\n}<\/code><\/pre>\n<p>Ahora, puedes invocar la funci\u00f3n anterior as\u00ed<\/p>\n<pre><code class=\"language-js\">appendToFile('activities.txt', 'Skiing');<\/code><\/pre>\n<p>A continuaci\u00f3n, puedes ejecutar el c\u00f3digo en el entorno Node.js utilizando el comando node, como vimos anteriormente. Esto crear\u00e1 un archivo llamado <strong>activities.txt<\/strong> con el contenido <code>Skiing<\/code> en \u00e9l.<\/p>\n<h4>3. Utilizar el m\u00e9todo open<\/h4>\n<p>El \u00faltimo m\u00e9todo que aprenderemos para crear y escribir en un archivo es el m\u00e9todo <code>open<\/code>. Puedes abrir un archivo utilizando la bandera <code>w<\/code> (para \u00abescribir\u00bb):<\/p>\n<pre><code class=\"language-js\">const { open} = require('fs\/promises');\n\nasync function openFile(fileName, data) {\n  try {\n    const file = await open(fileName, 'w');\n    await file.write(data);\n    console.log(`Opened file ${fileName}`);\n  } catch (error) {\n    console.error(`Got an error trying to open the file: {error.message}`);\n  }\n}<\/code><\/pre>\n<p>Ahora invoca la funci\u00f3n <code>openFile<\/code> con:<\/p>\n<pre><code class=\"language-js\">openFile('tasks.txt', 'Do homework');<\/code><\/pre>\n<p>Cuando ejecutes el script con el comando nodo, tendr\u00e1s un archivo llamado <strong>tareas.txt<\/strong> creado con el contenido inicial:<\/p>\n<pre><code class=\"language-html\">Do homework<\/code><\/pre>\n<h3>\u00bfC\u00f3mo leer un archivo?<\/h3>\n<p>Ahora que sabemos c\u00f3mo crear y escribir en un archivo, vamos a aprender a leer el contenido de un archivo. Para ello utilizaremos el m\u00e9todo <code>readFile<\/code> del m\u00f3dulo del sistema de archivos.<\/p>\n<p>Crea un archivo llamado <strong>readThisFile.js<\/strong> con el siguiente c\u00f3digo:<\/p>\n<pre><code class=\"language-js\">\/\/ readThisFile.js\nconst { readFile } = require('fs\/promises');\nasync function readThisFile(filePath) {\n  try {\n    const data = await readFile(filePath);\n    console.log(data.toString());\n  } catch (error) {\n    console.error(`Got an error trying to read the file: {error.message}`);\n }\n}<\/code><\/pre>\n<p>Ahora vamos a leer los tres archivos que hemos creado invocando la funci\u00f3n <code>readThisFile<\/code>:<\/p>\n<pre><code class=\"language-js\">readThisFile('activities.txt');\nreadThisFile('friends.txt');\nreadThisFile('tasks.txt');<\/code><\/pre>\n<p>Por \u00faltimo, ejecuta el script con el siguiente comando de nodo:<\/p>\n<pre><code class=\"language-bash\">node readThisFile.js<\/code><\/pre>\n<p>Deber\u00edas ver la siguiente salida en la consola:<\/p>\n<pre><code class=\"language-html\">Skiing\nDo homework\nBob<\/code><\/pre>\n<p>Un punto a tener en cuenta aqu\u00ed: El m\u00e9todo <code>readFile<\/code> lee el archivo de forma as\u00edncrona. Esto significa que el orden en el que lee el archivo y el orden en el que obtiene una respuesta para imprimir en la consola puede no ser el mismo. Tienes que utilizar la versi\u00f3n sincr\u00f3nica del m\u00e9todo <code>readFile<\/code> para conseguirlo en orden. Lo veremos aqu\u00ed dentro de un rato.<\/p>\n<h3>\u00bfC\u00f3mo cambiar el nombre de un archivo?<\/h3>\n<p>Para renombrar un archivo, utiliza el m\u00e9todo rename del m\u00f3dulo fs. Vamos a crear un archivo llamado <strong>rename-me.txt<\/strong>. Renombraremos este archivo mediante programaci\u00f3n.<\/p>\n<p>Crea un archivo llamado <strong>renameFile.js<\/strong> con el siguiente c\u00f3digo:<\/p>\n<pre><code class=\"language-js\">const { rename } = require('fs\/promises');\n\nasync function renameFile(from, to) {\n  try {\n    await rename(from, to);\n    console.log(`Renamed ${from} to ${to}`);\n  } catch (error) {\n    console.error(`Got an error trying to rename the file: ${error.message}`);\n  }\n}<\/code><\/pre>\n<p>Como habr\u00e1s notado, el m\u00e9todo renombrar toma dos argumentos. Uno es el archivo con el nombre de origen, y el otro es el nombre de destino.<\/p>\n<p>Ahora vamos a invocar la funci\u00f3n anterior para renombrar el archivo:<\/p>\n<pre><code class=\"language-js\">const oldName = \"rename-me.txt\";\nconst newName = \"renamed.txt\";\nrenameFile(oldName, newName);<\/code><\/pre>\n<p>Al igual que antes, ejecuta el archivo de script utilizando el comando nodo para renombrar el archivo:<\/p>\n<pre><code class=\"language-bash\">node renameFile.js<\/code><\/pre>\n<h3>\u00bfC\u00f3mo mover un archivo?<\/h3>\n<p>Mover un archivo de un directorio a otro es similar a renombrar su ruta. Por tanto, podemos utilizar el propio m\u00e9todo <code>rename<\/code> para mover archivos.<\/p>\n<p>Vamos a crear dos carpetas, <strong>desde<\/strong> y <strong>hasta<\/strong>. Luego crearemos un archivo llamado <strong>moverme.txt <\/strong>dentro de la carpeta <strong>desde<\/strong>.<\/p>\n<p>A continuaci\u00f3n, escribiremos el c\u00f3digo para mover el archivo move-me. <strong>txt<\/strong>. Crea un archivo llamado <strong>moveFile.js<\/strong> con el siguiente fragmento:<\/p>\n<pre><code class=\"language-js\">const { rename } = require('fs\/promises');\nconst { join } = require('path');\nasync function moveFile(from, to) {\n  try {\n    await rename(from, to);\n    console.log(`Moved ${from} to ${to}`);\n  } catch (error) {\n    console.error(`Got an error trying to move the file: ${error.message}`);\n  }\n}<\/code><\/pre>\n<p>Como puedes ver, estamos utilizando el m\u00e9todo <code>rename<\/code> igual que antes. Pero, \u00bfpor qu\u00e9 necesitamos importar el m\u00e9todo <code>join<\/code> del m\u00f3dulo <code>path<\/code> (s\u00ed, la ruta es otro m\u00f3dulo crucial de Node.js)?<\/p>\n<p>El m\u00e9todo <code>join<\/code> se utiliza para unir varios segmentos de ruta especificados para formar una ruta. Lo utilizaremos para formar la ruta de los nombres de los archivos de origen y destino:<\/p>\n<pre><code class=\"language-js\">const fromPath = join(__dirname, \"from\", \"move-me.txt\");\nconst destPath = join(__dirname, \"to\", \"move-me.txt\");\nmoveFile(fromPath, destPath);<\/code><\/pre>\n<p>\u00a1Y eso es todo! Si ejecutas el script <strong>moveFile.js<\/strong>, ver\u00e1s que el archivo <strong>move-me.txt<\/strong> se ha movido a la carpeta <strong>to<\/strong>.<\/p>\n<h3>\u00bfC\u00f3mo copiar un archivo?<\/h3>\n<p>Utilizamos el m\u00e9todo <code>copyFile<\/code> del m\u00f3dulo <code>fs<\/code> para copiar un archivo del origen al destino.<\/p>\n<p>Echa un vistazo al fragmento de c\u00f3digo que aparece a continuaci\u00f3n:<\/p>\n<pre><code class=\"language-js\">const { copyFile } = require('fs\/promises');\nconst { join } = require('path');\nasync function copyAFile(from, to) {\n  try {\n    await copyFile(from, to);\n    console.log(`Copied ${from} to ${to}`);\n  } catch (err) {\n    console.error(`Got an error trying to copy the file: ${err.message}`);\n  }\n}<\/code><\/pre>\n<p>Ahora puedes invocar la funci\u00f3n anterior con<\/p>\n<pre><code class=\"language-js\">copyAFile('friends.txt', 'friends-copy.txt');<\/code><\/pre>\n<p>Copiar\u00e1 el contenido de <strong>amigos.txt<\/strong> al archivo <strong>amigos-copia.txt<\/strong>.<\/p>\n<p>Eso est\u00e1 muy bien, pero \u00bfc\u00f3mo se copian varios archivos?<\/p>\n<p>Puedes utilizar la API <code>Promise.all<\/code> para ejecutar varias promesas en paralelo:<\/p>\n<pre><code class=\"language-js\">async function copyAll(fromDir, toDir, filePaths) {\n  return Promise.all(filePaths.map(filePath =&gt; {\n   return copyAFile(join(fromDir, filePath), join(toDir, filePath));\n  }));\n}<\/code><\/pre>\n<p>Ahora puedes suministrar todas las rutas de los archivos para copiarlos de un directorio a otro:<\/p>\n<pre><code class=\"language-js\">copyFiles('from', 'to', ['copyA.txt', 'copyB.txt']);<\/code><\/pre>\n<p>Tambi\u00e9n puedes utilizar este m\u00e9todo para realizar otras operaciones como mover, escribir y leer archivos en paralelo.<\/p>\n<h3>\u00bfC\u00f3mo eliminar un archivo?<\/h3>\n<p>Utilizamos el m\u00e9todo <code>unlink<\/code> para eliminar un archivo:<\/p>\n<pre><code class=\"language-js\">const { unlink } = require('fs\/promises');\nasync function deleteFile(filePath) {\n  try {\n    await unlink(filePath);\n    console.log(`Deleted ${filePath}`);\n  } catch (error) {\n    console.error(`Got an error trying to delete the file: ${error.message}`);\n  }\n}<\/code><\/pre>\n<p>Recuerda que tendr\u00e1s que proporcionar la ruta del archivo para eliminarlo:<\/p>\n<pre><code class=\"language-js\">deleteFile('delete-me.txt');<\/code><\/pre>\n<p>Ten en cuenta que si la ruta es un enlace simb\u00f3lico a otro archivo, el m\u00e9todo de desvinculaci\u00f3n cancelar\u00e1 el enlace simb\u00f3lico, pero el archivo original no se ver\u00e1 afectado. M\u00e1s adelante hablaremos de los enlaces simb\u00f3licos.<\/p>\n<h3>C\u00f3mo cambiar los permisos y la propiedad de los archivos<\/h3>\n<p>Puede que en alg\u00fan momento quieras cambiar los permisos de los archivos mediante programaci\u00f3n. Esto puede ser muy \u00fatil para hacer que un archivo sea de s\u00f3lo lectura o totalmente accesible.<\/p>\n<p>Utilizaremos el m\u00e9todo <code>chmod<\/code> para cambiar el permiso de un archivo:<\/p>\n<pre><code class=\"language-js\">const { chmod } = require('fs\/promises');\nasync function changePermission(filePath, permission) {\n  try {\n    await chmod(filePath, permission);\n    console.log(`Changed permission to ${permission} for ${filePath}`);\n  } catch (error) {\n    console.error(`Got an error trying to change permission: ${error.message}`);\n  }\n}<\/code><\/pre>\n<p>Podemos pasar la ruta del archivo y la m\u00e1scara de bits del permiso para cambiar el permiso.<\/p>\n<p>Aqu\u00ed est\u00e1 la llamada a la funci\u00f3n para cambiar el permiso de un archivo a s\u00f3lo lectura:<\/p>\n<pre><code class=\"language-js\">changePermission('permission.txt', 0o400);<\/code><\/pre>\n<p>De forma similar al permiso, tambi\u00e9n puedes cambiar la propiedad de un archivo mediante programaci\u00f3n. Para ello utilizamos el m\u00e9todo <code>chown<\/code>:<\/p>\n<pre><code class=\"language-js\">const { chown } = require('fs\/promises');\n\nasync function changeOwnership(filePath, userId, groupId) {\n  try {\n    await chown(filePath, userId, groupId);\n    console.log(`Changed ownership to ${userId}:${groupId} for ${filePath}`);\n  } catch (error) {\n    console.error(`Got an error trying to change ownership: ${error.message}`);\n  }\n}<\/code><\/pre>\n<p>Luego llamamos a la funci\u00f3n con la ruta del archivo, el ID de usuario y el ID de grupo:<\/p>\n<pre><code class=\"language-js\">changeOwnership('ownership.txt', 1000, 1010);<\/code><\/pre>\n<h3>\u00bfC\u00f3mo crear un enlace simb\u00f3lico?<\/h3>\n<p>El <a href=\"https:\/\/kinsta.com\/blog\/managing-wordpress-development-with-symlinks\/\" rel=\"noopener\">enlace simb\u00f3lico (tambi\u00e9n conocido como symlink)<\/a> es un concepto del sistema de archivos para crear un enlace a un archivo o carpeta. Creamos enlaces simb\u00f3licos para crear accesos directos a un archivo\/carpeta de destino en el sistema de archivos. El m\u00f3dulo de Node.js <code>filesystem<\/code> proporciona el m\u00e9todo <code>symlink<\/code> para crear un enlace simb\u00f3lico.<\/p>\n<p>Para crear el enlace simb\u00f3lico, tenemos que pasar la ruta del archivo de destino, la ruta real del archivo y el tipo:<\/p>\n<pre><code class=\"language-js\">const { symlink } = require('fs\/promises');\nconst { join } = require('path');\nasync function createSymlink(target, path, type) {\n  try {\n    await symlink(target, path, type);\n    console.log(`Created symlink to ${target} at ${path}`);\n  } catch (error) {\n    console.error(`Got an error trying to create the symlink: ${error.message}`);\n  }\n}<\/code><\/pre>\n<p>Podemos invocar la funci\u00f3n con:<\/p>\n<pre><code class=\"language-js\">createSymlink('join(__dirname, from, symMe.txt)', 'symToFile', 'file');<\/code><\/pre>\n<p>Aqu\u00ed hemos creado un enlace simb\u00f3lico llamado <code>symToFile<\/code>.<\/p>\n<h3>\u00bfC\u00f3mo ver los cambios en un archivo?<\/h3>\n<p>\u00bfSab\u00edas que puedes observar los cambios que se producen en un archivo? Es una buena forma de controlar las alteraciones y los eventos, especialmente cuando no los esperas. Puedes capturarlas y auditarlas para su posterior revisi\u00f3n.<\/p>\n<p>El m\u00e9todo <code>watch<\/code> es la mejor manera de observar los cambios en los archivos. Existe un m\u00e9todo alternativo llamado <code>watchFile<\/code>, pero no es tan eficaz como el m\u00e9todo <code>watch<\/code>.<\/p>\n<p>Hasta ahora, hemos utilizado el m\u00e9todo del m\u00f3dulo del sistema de archivos con las palabras clave async\/await. Veamos los usos de la funci\u00f3n de devoluci\u00f3n de llamada con este ejemplo.<\/p>\n<p>El m\u00e9todo <code>watch<\/code> acepta como argumentos la ruta del archivo y una funci\u00f3n de devoluci\u00f3n de llamada. Cada vez que se produce una actividad en el archivo, se llama a la funci\u00f3n <code>callback<\/code>.<\/p>\n<p>Podemos aprovechar el par\u00e1metro <code>event<\/code> para obtener m\u00e1s informaci\u00f3n sobre las actividades:<\/p>\n<pre><code class=\"language-js\">const fs = require('fs');\nfunction watchAFile(file) {\n  fs.watch(file, (event, filename) =&gt; {\n    console.log(`${filename} file Changed`);\n  });\n}<\/code><\/pre>\n<p>Invoca la funci\u00f3n pasando un nombre de archivo a <code>watch<\/code>:<\/p>\n<pre><code class=\"language-js\">watchAFile('friends.txt');<\/code><\/pre>\n<p>Ahora capturamos autom\u00e1ticamente cualquier actividad en el archivo <strong>friends.txt<\/strong>.<\/p>\n<h2>Trabajar con directorios (carpetas) en Node.js<\/h2>\n<p>Pasemos ahora a aprender c\u00f3mo realizar operaciones sobre directorios o carpetas. Muchas de las operaciones como renombrar, mover y copiar son similares a las que hemos visto para los archivos. Sin embargo, hay m\u00e9todos y operaciones espec\u00edficas que s\u00f3lo se pueden realizar sobre directorios.<\/p>\n<h3>\u00bfC\u00f3mo crear un directorio?<\/h3>\n<p>Utilizamos el m\u00e9todo <code>mkdir<\/code> para crear un directorio. Tienes que pasar el nombre del directorio como argumento:<\/p>\n<pre><code class=\"language-js\">const { mkdir } = require('fs\/promises');\nasync function createDirectory(path) {\n  try {\n    await mkdir(path);\n    console.log(`Created directory ${path}`);\n  } catch (error) {\n    console.error(`Got an error trying to create the directory: ${error.message}`);\n  }\n}<\/code><\/pre>\n<p>Ahora podemos invocar la funci\u00f3n <code>createDirectory<\/code> con una ruta de directorio:<\/p>\n<pre><code class=\"language-js\">createDirectory('new-directory');<\/code><\/pre>\n<p>Esto crear\u00e1 un directorio llamado <strong>nuevo-directorio<\/strong>.<\/p>\n<h3>\u00bfC\u00f3mo crear un directorio temporal?<\/h3>\n<p>Los directorios temporales no son directorios normales. Tienen un significado especial para el sistema operativo. Puedes crear un directorio temporal utilizando el m\u00e9todo <code>mkdtemp()<\/code>.<\/p>\n<p>Vamos a crear una carpeta temporal dentro del directorio temporal de tu sistema operativo. Obtenemos la informaci\u00f3n para la ubicaci\u00f3n del directorio temporal del m\u00e9todo <code>tmpdir()<\/code> del m\u00f3dulo <code>os<\/code>:<\/p>\n<pre><code class=\"language-js\">const { mkdtemp } = require('fs\/promises');\nconst { join } = require('path');\nconst { tmpdir } = require('os');\nasync function createTemporaryDirectory(fileName) {\n  try {\n    const tempDirectory = await mkdtemp(join(tmpdir(), fileName));\n    console.log(`Created temporary directory ${tempDirectory}`);\n  } catch (error) {\n    console.error(`Got an error trying to create the temporary directory: ${error.message}`);\n  }\n}<\/code><\/pre>\n<p>Ahora, vamos a llamar a la funci\u00f3n con el nombre del directorio para crearlo:<\/p>\n<pre><code class=\"language-js\">createTemporaryDirectory('node-temp-file-');<\/code><\/pre>\n<p>Ten en cuenta que Node.js a\u00f1adir\u00e1 seis caracteres aleatorios al final del nombre de la carpeta temporal creada para que sea \u00fanica.<\/p>\n<h3>\u00bfC\u00f3mo eliminar un directorio?<\/h3>\n<p>Tienes que utilizar el m\u00e9todo <code>rmdir()<\/code> para eliminar\/borrar un directorio:<\/p>\n<pre><code class=\"language-js\">const { rmdir } = require('fs\/promises');\nasync function deleteDirectory(path) {\n  try {\n    await rmdir(path);\n    console.log(`Deleted directory ${path}`);\n  } catch (error) {\n    console.error(`Got an error trying to delete the directory: ${error.message}`);\n  }\n}<\/code><\/pre>\n<p>A continuaci\u00f3n, llama a la funci\u00f3n anterior pasando la ruta de la carpeta que quieres eliminar:<\/p>\n<pre><code class=\"language-js\">deleteDirectory('new-directory-renamed');<\/code><\/pre>\n<h2>APIs s\u00edncronas vs. as\u00edncronas<\/h2>\n<p>Hasta ahora, hemos visto muchos ejemplos de m\u00e9todos del sistema de archivos, y todos ellos son con usos as\u00edncronos. Sin embargo, es posible que necesites manejar algunas operaciones de forma sincr\u00f3nica.<\/p>\n<p>Un ejemplo de operaci\u00f3n sincr\u00f3nica es la lectura de varios archivos uno tras otro. El m\u00f3dulo <code>fs<\/code> tiene un m\u00e9todo llamado <code>readFileSync()<\/code> para hacerlo:<\/p>\n<pre><code class=\"language-js\">const { readFileSync } = require('fs');\nfunction readFileSynchronously(path) {\n  try {\n    const data = readFileSync(path);\n    console.log(data.toString());\n  } catch (error) {\n    console.error(error);\n  }\n}<\/code><\/pre>\n<p>Ten en cuenta que el m\u00e9todo <code>readFileSync()<\/code> no es necesario desde el paquete \u00abfs\/promesas\u00bb. Esto se debe a que el m\u00e9todo no es as\u00edncrono. Por tanto, puedes llamar a la funci\u00f3n anterior con<\/p>\n<pre><code class=\"language-js\">readFileSynchronously('activities.txt');\nreadFileSynchronously('friends.txt');\nreadFileSynchronously('tasks.txt');<\/code><\/pre>\n<p>En este caso, todos los archivos anteriores se leer\u00e1n en el orden en que se llamaron las funciones.<\/p>\n<p>El m\u00f3dulo del sistema de archivos de Node.js ofrece un m\u00e9todo s\u00edncrono para otras operaciones como la de lectura. Util\u00edzalos con prudencia y s\u00f3lo cuando sea necesario. Los m\u00e9todos as\u00edncronos son mucho m\u00e1s \u00fatiles para la ejecuci\u00f3n en paralelo.<\/p>\n<h2>Manejo de errores<\/h2>\n<p>Como sabe cualquier programador, tienes que <a href=\"https:\/\/kinsta.com\/es\/blog\/errores-en-javascript\/\" target=\"_blank\" rel=\"noopener noreferrer\">esperar que se produzcan errores y estar preparado para manejarlos<\/a> cuando realices una operaci\u00f3n de archivo o directorio. \u00bfQu\u00e9 pasa si no se encuentra el archivo, o si no tienes permiso para escribir en un archivo? Puede haber (y probablemente habr\u00e1) muchos casos en los que puedas encontrar un error.<\/p>\n<p>Siempre debes rodear tus llamadas a m\u00e9todos con un bloque try-catch. De esta forma, si se produce un error, el control pasar\u00e1 al bloque catch, donde podr\u00e1s revisar y manejar el error. Como habr\u00e1s observado en todos los ejemplos anteriores, hemos utilizado el bloque try-catch para manejar los errores que nos encontramos.<\/p>\n\n<h2>Resumen<\/h2>\n<p>Repasemos los puntos clave que hemos cubierto en este tutorial:<\/p>\n<ul>\n<li>El m\u00f3dulo del sistema de archivos (fs) de Node.js tiene muchos m\u00e9todos para ayudar en muchas tareas de bajo nivel.<\/li>\n<li>Puedes realizar varias operaciones con archivos como crear, escribir, renombrar, copiar, mover, eliminar y muchas m\u00e1s.<\/li>\n<li>Puedes realizar varias operaciones de directorio como crear, directorio temporal, mover, y muchas m\u00e1s.<\/li>\n<li>Todos los m\u00e9todos se pueden invocar de forma as\u00edncrona utilizando promesas de JavaScript o funciones de devoluci\u00f3n de llamada.<\/li>\n<li>Tambi\u00e9n puedes invocar los m\u00e9todos de forma sincr\u00f3nica si es necesario.<\/li>\n<li>Prefiere siempre los m\u00e9todos as\u00edncronos a los s\u00edncronos.<\/li>\n<li>Maneja los errores con un bloque try-catch cada vez que interact\u00faes con los m\u00e9todos.<\/li>\n<\/ul>\n<p>Ahora que hemos trabajado un poco con el sistema de archivos de Node.js, deber\u00edas tener un buen manejo de sus entresijos. Si quieres reforzar a\u00fan m\u00e1s tus conocimientos, tal vez quieras investigar los flujos de <a href=\"https:\/\/nodejs.org\/api\/stream.html\" target=\"_blank\" rel=\"noopener noreferrer\">Node.js<\/a>\u00a0como una progresi\u00f3n natural del aprendizaje de los m\u00f3dulos de Node.js. Los streams son formas eficientes de manejar el intercambio de informaci\u00f3n, incluyendo las llamadas a la red, la lectura\/escritura de archivos y mucho m\u00e1s.<\/p>\n<p>Puedes encontrar todo el c\u00f3digo fuente utilizado en este art\u00edculo en <a href=\"https:\/\/github.com\/atapas\/nodeX\/tree\/main\/fs-module\" target=\"_blank\" rel=\"noopener noreferrer\">este repositorio de GitHub<\/a>.<\/p>\n<p>\u00bfEst\u00e1s pensando en utilizar Node.js para tu pr\u00f3ximo proyecto? Dinos por qu\u00e9 lo has elegido en la secci\u00f3n de comentarios m\u00e1s abajo.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>JavaScript ha sido durante mucho tiempo uno de los lenguajes de scripting m\u00e1s populares, pero durante un largo periodo de tiempo, no fue una gran opci\u00f3n &#8230;<\/p>\n","protected":false},"author":242,"featured_media":54118,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[867,804,847,1102],"topic":[1296,1311],"class_list":["post-54117","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-javascript","tag-javascript-frameworks","tag-node-js","tag-npm","topic-frameworks-javascript","topic-node-js"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Entender el M\u00f3dulo del Sistema de Archivos de Node.js (FS)<\/title>\n<meta name=\"description\" content=\"\u00bfTienes problemas para navegar por el m\u00f3dulo del sistema de archivos de Node.js? Aprende con estos ejemplos c\u00f3mo las APIs del m\u00f3dulo te ayudan a utilizar archivos y directorios.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/es\/blog\/nodejs-fs\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Entender el M\u00f3dulo del Sistema de Archivos de Node.js (FS)\" \/>\n<meta property=\"og:description\" content=\"\u00bfTienes problemas para navegar por el m\u00f3dulo del sistema de archivos de Node.js? Aprende con estos ejemplos c\u00f3mo las APIs del m\u00f3dulo te ayudan a utilizar archivos y directorios.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/es\/blog\/nodejs-fs\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinsta.es\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-07-12T07:20:02+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-10-01T19:32:05+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/07\/nodejs-fs.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Tapas Adhikary\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"\u00bfTienes problemas para navegar por el m\u00f3dulo del sistema de archivos de Node.js? Aprende con estos ejemplos c\u00f3mo las APIs del m\u00f3dulo te ayudan a utilizar archivos y directorios.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/07\/nodejs-fs.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@Kinsta_ES\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_ES\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Tapas Adhikary\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/nodejs-fs\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/nodejs-fs\/\"},\"author\":{\"name\":\"Tapas Adhikary\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/cbf8d294c77f2e4e63a847227b8b676f\"},\"headline\":\"Entender el M\u00f3dulo del Sistema de Archivos de Node.js (FS)\",\"datePublished\":\"2022-07-12T07:20:02+00:00\",\"dateModified\":\"2025-10-01T19:32:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/nodejs-fs\/\"},\"wordCount\":2959,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/nodejs-fs\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/07\/nodejs-fs.jpg\",\"keywords\":[\"JavaScript\",\"JavaScript Frameworks\",\"node.js\",\"npm\"],\"inLanguage\":\"es\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/nodejs-fs\/\",\"url\":\"https:\/\/kinsta.com\/es\/blog\/nodejs-fs\/\",\"name\":\"Entender el M\u00f3dulo del Sistema de Archivos de Node.js (FS)\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/nodejs-fs\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/nodejs-fs\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/07\/nodejs-fs.jpg\",\"datePublished\":\"2022-07-12T07:20:02+00:00\",\"dateModified\":\"2025-10-01T19:32:05+00:00\",\"description\":\"\u00bfTienes problemas para navegar por el m\u00f3dulo del sistema de archivos de Node.js? Aprende con estos ejemplos c\u00f3mo las APIs del m\u00f3dulo te ayudan a utilizar archivos y directorios.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/nodejs-fs\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/nodejs-fs\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/nodejs-fs\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/07\/nodejs-fs.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/07\/nodejs-fs.jpg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/nodejs-fs\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/es\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Node.js\",\"item\":\"https:\/\/kinsta.com\/es\/secciones\/node-js\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Entender el M\u00f3dulo del Sistema de Archivos de Node.js (FS)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/es\/#website\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluciones de alojamiento premium, r\u00e1pidas y seguras\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/es\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/es\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinsta.es\/\",\"https:\/\/x.com\/Kinsta_ES\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/cbf8d294c77f2e4e63a847227b8b676f\",\"name\":\"Tapas Adhikary\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/9665271e577fe06eec74cdff7372f6d3?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/9665271e577fe06eec74cdff7372f6d3?s=96&d=mm&r=g\",\"caption\":\"Tapas Adhikary\"},\"description\":\"Tapas Adhikary is a technology blogger, YouTuber, and mentor. He has published over 250 articles sharing his decade's worth of knowledge and experience. He's a passionate contributor to and maintainer of open-source projects.\",\"url\":\"https:\/\/kinsta.com\/es\/blog\/author\/tapasadhikary\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Entender el M\u00f3dulo del Sistema de Archivos de Node.js (FS)","description":"\u00bfTienes problemas para navegar por el m\u00f3dulo del sistema de archivos de Node.js? Aprende con estos ejemplos c\u00f3mo las APIs del m\u00f3dulo te ayudan a utilizar archivos y directorios.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/es\/blog\/nodejs-fs\/","og_locale":"es_ES","og_type":"article","og_title":"Entender el M\u00f3dulo del Sistema de Archivos de Node.js (FS)","og_description":"\u00bfTienes problemas para navegar por el m\u00f3dulo del sistema de archivos de Node.js? Aprende con estos ejemplos c\u00f3mo las APIs del m\u00f3dulo te ayudan a utilizar archivos y directorios.","og_url":"https:\/\/kinsta.com\/es\/blog\/nodejs-fs\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinsta.es\/","article_published_time":"2022-07-12T07:20:02+00:00","article_modified_time":"2025-10-01T19:32:05+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/07\/nodejs-fs.jpg","type":"image\/jpeg"}],"author":"Tapas Adhikary","twitter_card":"summary_large_image","twitter_description":"\u00bfTienes problemas para navegar por el m\u00f3dulo del sistema de archivos de Node.js? Aprende con estos ejemplos c\u00f3mo las APIs del m\u00f3dulo te ayudan a utilizar archivos y directorios.","twitter_image":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/07\/nodejs-fs.jpg","twitter_creator":"@Kinsta_ES","twitter_site":"@Kinsta_ES","twitter_misc":{"Escrito por":"Tapas Adhikary","Tiempo de lectura":"15 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/es\/blog\/nodejs-fs\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/blog\/nodejs-fs\/"},"author":{"name":"Tapas Adhikary","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/cbf8d294c77f2e4e63a847227b8b676f"},"headline":"Entender el M\u00f3dulo del Sistema de Archivos de Node.js (FS)","datePublished":"2022-07-12T07:20:02+00:00","dateModified":"2025-10-01T19:32:05+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/nodejs-fs\/"},"wordCount":2959,"publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/nodejs-fs\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/07\/nodejs-fs.jpg","keywords":["JavaScript","JavaScript Frameworks","node.js","npm"],"inLanguage":"es"},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/es\/blog\/nodejs-fs\/","url":"https:\/\/kinsta.com\/es\/blog\/nodejs-fs\/","name":"Entender el M\u00f3dulo del Sistema de Archivos de Node.js (FS)","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/nodejs-fs\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/nodejs-fs\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/07\/nodejs-fs.jpg","datePublished":"2022-07-12T07:20:02+00:00","dateModified":"2025-10-01T19:32:05+00:00","description":"\u00bfTienes problemas para navegar por el m\u00f3dulo del sistema de archivos de Node.js? Aprende con estos ejemplos c\u00f3mo las APIs del m\u00f3dulo te ayudan a utilizar archivos y directorios.","breadcrumb":{"@id":"https:\/\/kinsta.com\/es\/blog\/nodejs-fs\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/es\/blog\/nodejs-fs\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/blog\/nodejs-fs\/#primaryimage","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/07\/nodejs-fs.jpg","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/07\/nodejs-fs.jpg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/es\/blog\/nodejs-fs\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/es\/"},{"@type":"ListItem","position":2,"name":"Node.js","item":"https:\/\/kinsta.com\/es\/secciones\/node-js\/"},{"@type":"ListItem","position":3,"name":"Entender el M\u00f3dulo del Sistema de Archivos de Node.js (FS)"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/es\/#website","url":"https:\/\/kinsta.com\/es\/","name":"Kinsta\u00ae","description":"Soluciones de alojamiento premium, r\u00e1pidas y seguras","publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/es\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinsta.es\/","https:\/\/x.com\/Kinsta_ES","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/cbf8d294c77f2e4e63a847227b8b676f","name":"Tapas Adhikary","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/9665271e577fe06eec74cdff7372f6d3?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9665271e577fe06eec74cdff7372f6d3?s=96&d=mm&r=g","caption":"Tapas Adhikary"},"description":"Tapas Adhikary is a technology blogger, YouTuber, and mentor. He has published over 250 articles sharing his decade's worth of knowledge and experience. He's a passionate contributor to and maintainer of open-source projects.","url":"https:\/\/kinsta.com\/es\/blog\/author\/tapasadhikary\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/54117","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/users\/242"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/comments?post=54117"}],"version-history":[{"count":9,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/54117\/revisions"}],"predecessor-version":[{"id":78441,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/54117\/revisions\/78441"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/54117\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/54117\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/54117\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/54117\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/54117\/translations\/de"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/54117\/translations\/es"},{"href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/54117\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media\/54118"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media?parent=54117"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/tags?post=54117"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/topic?post=54117"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}