En nodo, el módulo fs se refiere al "módulo del sistema de archivos", que es un módulo utilizado para operar archivos. La mayoría de las API del módulo fs proporcionan tres métodos operativos: 1. Operación de archivo sincrónica: el código se bloqueará y no continuará ejecutándose 2. Archivo de operación de función de devolución de llamada asincrónica: el código no se bloqueará y es necesario crear una función de devolución de llamada; pasado Cuando se genera el resultado, se ejecuta la función de devolución de llamada 3. Archivo de operación de Promesa asincrónica: el código no se bloqueará y se devolverá una Promesa llamando a la operación del método a través de fs.promises.
El entorno operativo de este tutorial: sistema Windows 7, nodejs versión 16, computadora DELL G3.
El módulo del sistema de archivos (fs para abreviar) nos permite acceder e interactuar con el sistema de archivos de nuestra computadora.
El módulo fs es un módulo proporcionado oficialmente por Node.js para archivos operativos. Proporciona una serie de métodos y propiedades para satisfacer las necesidades de operación de archivos de los usuarios.
Método fs.readFile(), utilizado para leer el contenido del archivo especificado
Método fs.writeFile(), utilizado para escribir contenido en el archivo especificado si desea usarlo en código JavaScript
El módulo del sistema de archivos es un módulo central de Node.js. Esto significa que no tenemos que instalarlo. Lo único que debemos hacer es importar el módulo fs a su propio archivo.
Entonces, en la parte superior del archivo agregue:
constante fs = requerir('fs')Ahora podemos llamar a cualquier método desde el módulo del sistema de archivos usando el prefijo fs.
Alternativamente, podemos simplemente importar los métodos requeridos desde la API fs de la siguiente manera:
const {escribirArchivo, leerArchivo} = requerir('fs')Nota: Por conveniencia, también necesitamos importar el módulo de ruta. Es otro módulo central de Node.js que nos permite trabajar con rutas de archivos y directorios.
Después de importar el módulo fs, agregue:
ruta constante = requerir('ruta')Cuando se utiliza el módulo del sistema de archivos, no se requiere el módulo de ruta. ¡Pero nos ayuda mucho!
Las operaciones de archivos del módulo fs generalmente admiten dos API: sincrónicas y asincrónicas. También incluyen funciones de devolución de llamada y formularios de promesa. La sincronización suele ir seguida de la palabra sincronización.
La mayoría de las API del módulo fs proporcionan tres métodos de operación:
Operación sincrónica de archivos: el código se bloqueará y no continuará ejecutándose
Archivo de operación de función de devolución de llamada asincrónica: el código no se bloqueará, se debe pasar la función de devolución de llamada y, cuando se obtenga el resultado, se ejecutará la función de devolución de llamada
Archivos de operaciones de promesa asincrónica: el código no se bloqueará. Las operaciones del método de llamada a través de fs.promises devolverán una promesa, que se puede procesar y capturar.
Tenga en cuenta que todos los métodos fs son asíncronos de forma predeterminada. Sin embargo, podemos usar la versión sincronizada agregando Sync al final del método.
Por ejemplo, la versión síncrona del método writeFile es writeFileSync. Los métodos sincrónicos completan el código de forma sincrónica, por lo que bloquean el hilo principal. Bloquear el hilo principal en Node.js se considera una mala práctica y no deberíamos hacerlo.
Por lo tanto, a continuación utilizaremos los métodos asincrónicos en el módulo del sistema de archivos.
Para escribir en un archivo desde una aplicación Node.js, utilice el método writeFile.
El método writeFile acepta al menos los siguientes parámetros:
Devolución de llamada del contenido del nombre del archivoSi el archivo especificado ya existe, reemplaza el contenido antiguo con el contenido que proporciona como argumento. Si el archivo especificado no existe, se crea un archivo nuevo.
Después de importar los módulos fs y path, escriba el siguiente código en el archivo:
fs.writeFile('content.txt', '¡Todo el trabajo y nada de juego hacen de Jack un chico aburrido!', err => { if (err) throw err process.stdout.write('¡Creado correctamente!')})El código anterior creará un nuevo archivo llamado content.txt y agregará el texto ¡Todo el trabajo y nada de juego hace que Jack sea un chico aburrido! Si hay algún error, la función de devolución de llamada arrojará ese error. De lo contrario, se mostrará en la consola que el archivo se creó correctamente.
Existen otras variaciones de writeFile, como por ejemplo:
fs.writeFileSync: escribe archivos de forma sincrónica fsPromises.writeFile: escribe archivos utilizando la API basada en PromiseMira esta esencia: https://gist.github.com/catalinpit/571ba06c06214b5c8744036c6500af92
Antes de leer un archivo, es necesario crear y almacenar la ruta al archivo. La ruta del módulo de ruta es conveniente aquí.
Usando el método de ruta del módulo de unión, puede crear una ruta de archivo de la siguiente manera:
const filePath = ruta.join(proceso.cwd(), 'content.txt')El primer parámetro process.cwd() devuelve el directorio de trabajo actual. Ahora que tiene la ruta del archivo, puede leer el contenido del archivo.
Escriba el siguiente código en el archivo:
fs.readFile(filePath, (error, contenido) => {si (error) arroja error proceso.stdout.write(contenido)})El método readFile acepta al menos dos parámetros:
Devolución de llamada de ruta de archivoSi hay un error, arrojará un error. De lo contrario, imprime el contenido del archivo en la terminal.
Existen otras variaciones de readFile, como:
fs.readFileSync: escribe en un archivo de forma sincrónica fsPromises.readFile: escribe en un archivo mediante una API basada en PromesaMira esta esencia: https://gist.github.com/catalinpit/badc2a539a44412892a0e05a9575d54d
Mostrar un archivo en un directorio es muy similar a leer el contenido del archivo. Sin embargo, en lugar de pasar la ruta del archivo, pase el directorio de trabajo actual (podemos pasar cualquier otro directorio).
Luego, pase una función de devolución de llamada para manejar la respuesta. Escriba el siguiente código en el archivo:
fs.readdir(process.cwd(), (error, archivos) => {si (error) throw error console.log(archivos)})Hasta ahora, solo hemos usado Process.stdout.write para enviar contenido al terminal. Sin embargo, puedes simplemente usar console.log, como en el fragmento de código anterior.
Si ejecutamos la aplicación, deberíamos obtener una matriz que contenga todos los archivos del directorio.
Mira esta esencia: https://gist.github.com/catalinpit/f82c4e6ae3acd5d97efdecb0bc67979e
El módulo del sistema de archivos tiene un método que le permite eliminar archivos. Sin embargo, es importante tener en cuenta que sólo funciona para archivos, no para directorios.
Cuando se llama al método de desvinculación con una ruta de archivo como parámetro, elimina el archivo. Agregue el siguiente fragmento de código al archivo:
fs.unlink(filePath, error => { if (error) throw error console.log('¡El archivo ha sido eliminado!')})Si vuelves a ejecutar el código, ¡tus archivos se eliminarán!
Mira esta esencia: https://gist.github.com/catalinpit/b1201434218c400f77e042109bfce99e
Podemos crear un directorio de forma asincrónica usando el método mkdir. Escriba el siguiente código en el archivo:
fs.mkdir(`${process.cwd()}/myFolder/ secondFolder`, { recursivo: verdadero }, (err) => { if (err) throw err console.log('¡Carpeta creada correctamente!') })Primero, cree una nueva carpeta en el directorio de trabajo actual. Como se mencionó anteriormente, puede obtener el directorio de trabajo actual del objeto de proceso usando el método cwd().
Luego, pasa la carpeta o carpetas a crear. Sin embargo, esto no significa que deba crear una nueva carpeta en su directorio de trabajo actual. Puedes crearlos en cualquier lugar.
Ahora, el segundo parámetro es la opción recursiva. Si no se establece en verdadero, no se pueden crear varias carpetas. Si la opción recursiva se establece en falso, el código anterior dará un error. ¡Probar!
Sin embargo, si solo desea crear una carpeta, no es necesario establecer la opción recursiva en verdadero.
¡El siguiente código funciona bien!
fs.mkdir(`${process.cwd()}/myFolder`, err => { if (err) throw err console.log('¡Carpeta creada correctamente!')});Por tanto, me gustaría enfatizar el uso de recursivo. Debe establecer esto en verdadero si desea crear carpetas dentro de carpetas. Creará todas las carpetas incluso si no existen.
En cambio, si solo quieres crear una carpeta, puedes dejarla en false.
Mira esta esencia: https://gist.github.com/catalinpit/09bad802541102c0cce2a2e4c3985066
La lógica para eliminar un directorio es similar a la de crear un directorio. Si observa el código escrito para crear el directorio y el código siguiente, verá similitudes.
Entonces escriba el siguiente código en el archivo:
fs.rmdir(`${process.cwd()}/myFolder/`, { recursive: true }, err => { if (err) throw err console.log('¡Carpeta eliminada correctamente!')})Utilice el método rmdir del módulo del sistema de archivos y pase los siguientes parámetros:
Directorio que se eliminará devolución de llamada de propiedad recursivaSi la propiedad recursiva se establece en verdadero, elimina la carpeta y su contenido. Es importante tener en cuenta que debe establecer esto en verdadero si la carpeta contiene contenido. De lo contrario obtendrá un error.
El siguiente fragmento de código sólo funciona cuando la carpeta está vacía:
fs.rmdir(`${process.cwd()}/myFolder/`, err => { if (err) throw err console.log('¡Carpeta eliminada correctamente!')})Si hay otros archivos y/o carpetas en myFolder, se producirá un error si no se pasa { recursive: true }.
Es importante saber cuándo utilizar la opción recursiva y cuándo no para evitar problemas.
Mira esta esencia: https://gist.github.com/catalinpit/a8cb6aca75cef8d6ac5043eae9ba22ce
Usando el módulo fs, puede cambiar el nombre de directorios y archivos. El siguiente fragmento de código muestra cómo hacer esto usando el método de cambio de nombre.
// Cambiar el nombre de un directorio fs.rename(`${process.cwd()}/myFolder/ secondFolder`, `${process.cwd()}/myFolder/newFolder`, err => { if (err) throw err console .log('¡Renombrar directorio!')});//Cambiar el nombre de un archivo fs.rename(`${process.cwd()}/content.txt`, `${process.cwd()}/newFile .txt` , err => { if (err) throw err console.log('¡Archivo renombrado!')});El método de cambio de nombre contiene tres parámetros:
El primer parámetro es la carpeta/archivo existente y el segundo parámetro es la devolución de llamada del nuevo nombre.Entonces, para cambiar el nombre de un archivo o directorio, debemos pasar el nombre del archivo/directorio actual y el nuevo nombre. Después de ejecutar la aplicación, se deben actualizar los nombres de los directorios/archivos.
Tenga en cuenta que si la nueva ruta ya existe (por ejemplo, un nuevo nombre para un archivo/carpeta), se sobrescribirá. Así que asegúrese de no sobrescribir archivos/carpetas existentes por error.
Mira esta esencia: https://gist.github.com/catalinpit/5c3e7c6ae39d09996ff67175a719122e
También podemos agregar contenido nuevo a un archivo existente usando el método appendFile.
Si comparamos los dos métodos writeFile y appendFile, podemos ver que son similares. Pase la ruta del archivo, el contenido y la devolución de llamada.
fs.appendFile(filePath, 'n¡Todo el trabajo y nada de juego hacen de Jack un niño aburrido!', err => { if (err) throw err console.log('¡Todo el trabajo y nada de juego hacen de Jack un niño aburrido!')} )El fragmento de código anterior muestra cómo agregar contenido nuevo a un archivo existente. Si ejecuta la aplicación y abre el archivo, debería ver el nuevo contenido dentro.