Рубрики
Без рубрики

Узел: список файлов в каталоге

В этом руководстве мы узнаем, как перечислить файлы в каталоге, используя Node.js. Мы будем использовать дерево каталога пакета NPM для этого, а также встроенный модуль FS.

Автор оригинала: David Landup.

Вступление

Работа с файлами – это общая задача с любым языком программирования. Манипуляция файлов требует, чтобы мы узнали их местоположение. Один из самых фундаментальных способов взаимодействия с файлами – это список файлов в каталоге.

В этой статье мы будем использовать Node.js и встроенный ФС Модуль, а также Каталог – Дерево Модуль из NPM, чтобы переписать все файлы из каталога.

Мы прочитаем каталог, Файлы , расположен в том же месте нашего app.js Файл находится в:

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

Каталог содержит:

files
│   anotherDirectory
│   └── fileInDirectory.txt
└── textFile.txt
└── anotherTextFile.txt

Каталог – дерево

Каталог - Дерево это удобный модуль NPM, который заботится об этой задаче для нас и хорошо форматирует вывод. Сначала давайте установимся:

$ npm install directory-tree

Теперь давайте импомнем его в наш скрипт и поставьте его на наше каталог:

const dirTree = require("directory-tree");

const tree = dirTree('./files/');
console.log(tree);

дерево Константа теперь содержит информацию, которую мы хотели бы получить доступ. Этот код приводит к себе:

{
  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'
}

Мы также можем указать расширения, которые мы хотели бы фильтровать на основе, используя Dirtree () Функция:

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

Это вернет пустой результат, так как в файлов JS нет Файлы каталог.

Fs.Readdir ()

Самый простой способ прочитать файлы из каталога без внешних модулей – с помощью ReadDir () функция. Это асинхронный и возвращает массив, содержащий имена файлов в указанном вами каталоге.

Давайте пойдем вперед и перечислите файлы из Файлы Каталог:

const directory = './files/';
const fs = require('fs');

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

Здесь мы указали каталог Константа, указывая на Файлы Папка, после чего мы импортировали ФС модуль.

Затем мы поставляли каталог к ReadDir () функция и записано их имя через обратный вызов. Это приводит к:

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

Примечание: ReadDir () Функция также считывает каталоги, но без указания относительно того, является ли это каталог или файл. Файл без расширения выглядит так же, как каталог в этом случае.

Однако мы можем использовать fs.lstatsync () Функция, чтобы помочь нам с этим:

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);
    }
  });
});

Использование ISDirectory () , мы проверили, если то, что мы столкнулись с данным путем, это каталог или файл. Сейчас приводит к:

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

fs.readdirsync ()

ReadDirsync () Функция практически такая же, как ReadDir () Функция, но она читает синхронно, а не асинхронно.

Он работает так же, как предыдущий подход – он просто обрабатывает операцию синхронно:

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);
  }
});

Здесь мы сделали то же самое, что мы сделали раньше. Проверка файлов и каталогов, изменение потока слегка на основе результатов. Этот код печатает:

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

Заключение

В этой статье мы пропустили несколько способов перечисления файлов в каталоге в Node.js, мы начали с Каталог - Дерево , пакет NPM, построенный для этой цели, после чего мы использовали встроенный ФС Модуль и его ReadDir () и ReadDirsync () Функции для перечисления файлов.