Trabajando con carpetas en Node.js
El módulo principal fs
de Node.js proporciona muchos métodos útiles que puedes usar para trabajar con carpetas.
Comprobar si existe una carpeta
Usa fs.access()
(y su contraparte basada en promesas fsPromises.access()
) para comprobar si existe la carpeta y si Node.js puede acceder a ella con sus permisos.
const fs = require('node:fs');
try {
await fs.promises.access('/Users/joe');
} catch (err) {
throw err;
}
Crear una nueva carpeta
Usa fs.mkdir()
o fs.mkdirSync()
o fsPromises.mkdir()
para crear una nueva carpeta.
const fs = require('node:fs');
const folderName = '/Users/joe/test';
try {
fs.mkdirSync(folderName);
} catch (err) {
console.error(err);
}
Leer el contenido de un directorio
Usa fs.readdir()
o fs.readdirSync()
o fsPromises.readdir()
para leer el contenido de un directorio.
Este fragmento de código lee el contenido de una carpeta, tanto archivos como subcarpetas, y devuelve su ruta relativa:
const fs = require('node:fs');
const folderPath = '/Users/joe';
fs.readdirSync(folderPath).map(fileName => {
return path.join(folderPath, fileName);
});
Puedes obtener la ruta completa:
fs.readdirSync(folderPath)
.map(fileName => path.join(folderPath, fileName));
También puedes filtrar los resultados para devolver solo los archivos, excluyendo las carpetas:
const fs = require('node:fs');
const isFile = fileName => !fileName.includes(path.sep);
fs.readdirSync(folderPath)
.map(fileName => path.join(folderPath, fileName))
.filter(isFile);
Renombrar una carpeta
Usa fs.rename()
o fs.renameSync()
o fsPromises.rename()
para renombrar una carpeta. El primer parámetro es la ruta actual, el segundo la nueva ruta:
const fs = require('node:fs');
fs.rename('/Users/joe', '/Users/roger', err => {
if (err) {
console.error(err);
}
});
fs.renameSync()
es la versión síncrona:
const fs = require('node:fs');
try {
fs.renameSync('/Users/joe', '/Users/roger');
} catch (err) {
console.error(err);
}
fsPromises.rename()
es la versión basada en promesas:
const fs = require('node:fs/promises');
async function example() {
try {
await fs.rename('/Users/joe', '/Users/roger');
} catch (err) {
console.log(err);
}
}
example();
Eliminar una carpeta
Use fs.rmdir()
o fs.rmdirSync()
o fsPromises.rmdir()
para eliminar una carpeta.
const fs = require('node:fs');
fs.rmdir(dir, err => {
if (err) {
throw err;
}
console.log(`${dir} se ha eliminado!`);
});
Para eliminar una carpeta que contiene contenido, use fs.rm()
con la opción { recursive: true }
para eliminar recursivamente el contenido.
{ recursive: true, force: true }
hace que se ignoren las excepciones si la carpeta no existe.
const fs = require('node:fs');
fs.rm(dir, { recursive: true, force: true }, err => {
if (err) {
throw err;
}
console.log(`${dir} se ha eliminado!`);
});