Вступление
Работа с файлами - обычная задача для любого языка программирования. Для работы с файлами нам необходимо знать их местонахождение. Один из наиболее фундаментальных способов взаимодействия с файлами - перечисление файлов в каталоге.
В этой статье мы будем использовать Node.js и встроенный модуль fs, а также модуль дерева каталогов из NPM для вывода списка всех файлов из каталога.
Мы прочитаем каталог files
, расположенный в том же месте, app.js
находится наш файл app.js:
09/10/2020 01:27 PM 332 app.js
09/10/2020 01:24 PM <DIR> files
Справочник содержит:
files
│ anotherDirectory
│ └── fileInDirectory.txt
└── textFile.txt
└── anotherTextFile.txt
дерево каталогов
directory-tree
- удобный модуль NPM, который берет на себя эту задачу
за нас и красиво форматирует вывод. Для начала установим его:
$ npm install directory-tree
Теперь давайте импортируем его в наш скрипт и укажем местоположение нашего каталога:
const dirTree = require("directory-tree");
const tree = dirTree('./files/');
console.log(tree);
Константа 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);
Это вернет пустой результат, поскольку в каталоге files
fs.readdir ()
Проще всего читать файлы из каталога без внешних модулей с помощью
функции readdir()
. Он асинхронный и возвращает массив, содержащий
имена файлов в указанном вами каталоге.
Давайте продолжим и перечислим файлы из каталога files
const directory = './files/';
const fs = require('fs');
fs.readdir(directory, (err, files) => {
files.forEach(file => {
console.log(file);
});
});
Здесь мы указали directory
, указывающую на files
, после чего мы
импортировали модуль fs
Затем мы предоставили directory
функции 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. Мы начали с directory-tree
, пакета NPM,
созданного для этой цели, после чего мы использовали встроенный fs
и
его функции readdir()
и readdirSync()
для вывода списка файлов.