node: Mostrar archivos en un directorio

    Introducci贸n

    Trabajar con archivos es una tarea com煤n con cualquier lenguaje de programaci贸n. La manipulaci贸n de archivos requiere que conozcamos su ubicaci贸n. Una de las formas m谩s fundamentales de interactuar con los archivos es enumerar los archivos en un directorio.

    En este art铆culo, usaremos Node.js y el m贸dulo fs incorporado, as铆 como el m贸dulo de 谩rbol de directorios de NPM para enumerar todos los archivos de un directorio.

    Leeremos un directorio files, ubicado en el mismo lugar nuestro app.js el archivo est谩 en:

    09/10/2020  01:27 PM               332 app.js
    09/10/2020  01:24 PM    <DIR>          files
    

    El directorio contiene:

    files
    鈹   anotherDirectory
    鈹   鈹斺攢鈹 fileInDirectory.txt
    鈹斺攢鈹 textFile.txt
    鈹斺攢鈹 anotherTextFile.txt
    

    谩rbol-directorio

    directory-tree es un m贸dulo de NPM 煤til que se encarga de esta tarea por nosotros y formatea la salida de manera agradable. Primero, instal茅moslo:

    $ npm install directory-tree
    

    Ahora, import茅moslo a nuestro script y proporcion茅mosle la ubicaci贸n de nuestro directorio:

    const dirTree = require("directory-tree");
    
    const tree = dirTree('./files/');
    console.log(tree);
    

    los tree constante ahora contiene la informaci贸n a la que nos gustar铆a acceder. Este c贸digo da como resultado:

    {
      path: './files/',
      name: 'files',
      children: [
        {
          path: 'files\anotherDirectory',
          name: 'anotherDirectory',
          children: [Array],
          size: 8,
          type: 'directory'
        },
        {
          path: 'files\anotherTextFile.txt',
          name: 'anotherTextFile.txt',
          size: 2218,
          extension: '.txt',
          type: 'file'
        },
        {
          path: 'files\textFile.txt',
          name: 'textFile.txt',
          size: 7,
          extension: '.txt',
          type: 'file'
        }
      ],
      size: 2233,
      type: 'directory'
    }
    

    Tambi茅n podemos especificar las extensiones por las que nos gustar铆a filtrar, usando el dirTree() funci贸n:

    const tree = dirTree('./files/', {extensions:/.js$/});
    console.log(tree);
    

    Esto devolver铆a un resultado vac铆o ya que no hay archivos JS en el files directorio.

    fs.readdir ()

    La forma m谩s sencilla de leer archivos de un directorio sin m贸dulos externos es con la ayuda del readdir() funci贸n. Es asincr贸nico y devuelve una matriz que contiene nombres de archivo en el directorio que ha especificado.

    Sigamos adelante y enumeremos los archivos del files directorio:

    const directory = './files/';
    const fs = require('fs');
    
    fs.readdir(directory, (err, files) => {
        files.forEach(file => {
            console.log(file);
        });
    });
    

    Aqu铆, hemos especificado el directory constante, apuntando al files carpeta, despu茅s de lo cual, hemos importado el fs m贸dulo.

    Entonces, hemos proporcionado el directory al readdir() funci贸n y registr贸 su nombre a trav茅s de una devoluci贸n de llamada. Esto resulta en:

    anotherDirectory
    anotherTextFile.txt
    textFile.txt
    textFile.txt - Shortcut.lnk
    

    Nota: los readdir() La funci贸n tambi茅n lee directorios, pero sin una indicaci贸n de si es un directorio o un archivo. En este caso, un archivo sin extensi贸n tiene el mismo aspecto que un directorio.

    Sin embargo, podemos usar el fs.lstatSync() funci贸n para ayudarnos con esto:

    const directory = './files/';
    const path = require('path');
    const fs = require('fs');
    
    fs.readdir(directory, (err, files) => {
      files.forEach(file => {
        if (fs.lstatSync(path.resolve(directory, file)).isDirectory()) {
          console.log('Directory: ' + file);
        } else {
          console.log('File: ' + file);
        }
      });
    });
    

    Utilizando isDirectory(), hemos comprobado si lo que encontramos en la ruta dada es un directorio o un archivo. Esto ahora resulta en:

    Directory: anotherDirectory
    File: anotherTextFile.txt
    File: file
    File: textFile.txt
    

    fs.readdirSync ()

    los readdirSync() La funci贸n es pr谩cticamente la misma que la readdir() funci贸n, pero lee de forma sincr贸nica, en lugar de asincr贸nica.

    Funciona de la misma manera que el enfoque anterior: solo maneja la operaci贸n de forma sincr贸nica:

    const directory = './files/';
    const path = require('path');
    const fs = require('fs');
    
    fs.readdirSync(directory).forEach(file => {
      if (fs.lstatSync(path.resolve(directory, file)).isDirectory()) {
        console.log('Directory: ' + file);
      } else {
        console.log('File: ' + file);
      }
    });
    

    Aqu铆, hemos hecho lo mismo que hemos hecho antes. Comprobando archivos y directorios, cambiando ligeramente el flujo seg煤n los resultados. Este c贸digo se imprime:

    Directory: anotherDirectory
    File: anotherTextFile.txt
    File: file
    File: textFile.txt
    

    Conclusi贸n

    En este art铆culo, hemos repasado algunas formas de listar archivos en un directorio en Node.js. Comenzamos con directory-tree, un paquete de NPM creado para este prop贸sito, despu茅s de lo cual usamos el paquete integrado fs m贸dulo y su readdir() y readdirSync() funciones para listar los archivos.

     

    Etiquetas:

    Deja una respuesta

    Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *