У каждого файла есть набор деталей, которые мы можем исследовать средствами Node.js. В частности, с помощью метода stat(), предоставляемого модулем fs.
Вы вызываете его, передавая путь к файлу, и как только Node.js получит детали файла, он вызовет переданную вами функцию обратного вызова с 2 параметрами: сообщением об ошибке и информацией о файле (stats):
const fs = require('node:fs');
fs.stat('/Users/joe/test.txt', (err, stats) => {
if (err) {
console.error(err);
}
// информация о файле доступна в `stats`
});Node.js также предоставляет синхронный метод, который блокирует поток, пока информация о файле не будет готова:
const fs = require('node:fs');
try {
const stats = fs.statSync('/Users/joe/test.txt');
} catch (err) {
console.error(err);
}Информация о файле содержится в переменной stats. Какого рода информацию можно извлечь с помощью stats?
Много всего, в том числе:
- является ли объект директорией или файлом — с помощью
stats.isFile()иstats.isDirectory() - является ли файл символической ссылкой — с помощью
stats.isSymbolicLink() - размер файла в байтах — с помощью
stats.size.
Есть и другие продвинутые методы, но основная часть того, что вы будете использовать в повседневном программировании, — это они.
const fs = require('node:fs');
fs.stat('/Users/joe/test.txt', (err, stats) => {
if (err) {
console.error(err);
return;
}
stats.isFile(); // true
stats.isDirectory(); // false
stats.isSymbolicLink(); // false
console.log(stats.size); // 1024000 //= 1MB
});При желании можно использовать и метод fsPromises.stat() на основе промисов, предлагаемый модулем fs/promises:
const fs = require('node:fs/promises');
async function example() {
try {
const stats = await fs.stat('/Users/joe/test.txt');
stats.isFile(); // true
stats.isDirectory(); // false
stats.isSymbolicLink(); // false
console.log(stats.size); // 1024000 //= 1MB
} catch (err) {
console.log(err);
}
}
example();Подробнее о модуле fs можно почитать в официальной документации.