Как проверить, что указанный путь - это файл или каталог в node.js?

Опубликовано: 4 Августа, 2021

Иногда возникает необходимость проверить, является ли указанный путь файлом или каталогом, чтобы в зависимости от результата можно было выполнять различные операции. Например, чтобы записать информацию о каталоге и файле отдельно.
В Node.js обработкой файлов занимается модуль fs. Вы можете прочитать больше об этом здесь. Мы можем проверить путь к файлу или каталогу в Node.js как синхронным, так и асинхронным способом.

Примечание. Асинхронная версия обычно предпочтительнее, если вы заботитесь о производительности приложения.

Синхронный метод: синхронные операции отлично подходят для выполнения одноразовых операций с файлом / каталогом перед возвратом модуля. Чтобы проверить путь в синхронном режиме в модуле fs, мы можем использовать метод statSync (). Метод fs.statSync (path) возвращает экземпляр fs.Stats, присвоенный переменной stats. Объект fs.Stats предоставляет информацию о файле. Метод stats.isFile () возвращает true, если путь к файлу - File, в противном случае возвращает false. Метод stats.isDirectory () возвращает true, если путь к файлу - Directory, в противном случае возвращает false.

Пример 1:




// Require the given module
var fs = require( 'fs' );
// Use statSync() method to store the returned
// instance into variable named stats
var stats = fs.statSync( "/Users/divyarani/Documents/geekforgeeks/geeks.js" );
// Use isFile() method to log the result to screen
console.log( 'is file ? ' + stats.isFile());
var stats = fs.statSync( "/Users/divyarani/Documents/geekforgeeks/geek" );
// Use isDirectory() method to log the result to screen
console.log( 'is directory ? ' + stats.isDirectory());

Выход:

это файл? правда
это каталог? правда

Пример 2:




// Require the given module
var fs = require( 'fs' );
// Use statSync() method to store the returned
// instance into variable named stats
var stats = fs.statSync( "/Users/divyarani/Documents/geekforgeeks/geek" );
// Use isFile() method to log the result to the screen
console.log( 'is file ? ' + stats.isFile());
var stats = fs.statSync( "/Users/divyarani/Documents/geekforgeeks/geeks.js" );
// Use isDirectory() method to log the result to screen
console.log( 'is directory ? ' + stats.isDirectory());

Выход:

 это файл? ложный
это каталог? ложный

Асинхронный метод: в асинхронной версии блок кода внутри функции будет в основном неблокирующим для конечного пользователя, и пользователю не будет препятствовать выполнять различные действия для различных подпроцессов. Для проверки пути в асинхронном режиме в модуле fs мы можем использовать метод fs.stat (). Метод fs.stat () принимает два параметра, первый параметр - это путь, а второй - функция обратного вызова с двумя параметрами, один - для ошибки в случае возникновения ошибки, а второй параметр - это данные, полученные при вызове fs.stat () метод, который хранится в переменной stats. Метод stats.isFile () возвращает true, если путь к файлу - File, в противном случае возвращает false. Метод stats.isDirectory () возвращает true, если путь к файлу - Directory, в противном случае возвращает false.

Пример 1:




// Require the given module
var fs = require( 'fs' ),
path = "/Users/divyarani/Documents/geekforgeeks/geek"
// Use stat() method
fs.stat(path, (err, stats) => {
if ( !err ){
if (stats.isFile()){
console.log( 'is file ? ' + stats.isFile());
}
else if (stats.isDirectory()){
console.log( 'is directory? ' + stats.isDirectory());
}
}
else
throw err;
});

Выход:

 это каталог? правда

Пример 2:




// Require the given module
var fs = require( 'fs' ),
path = "/Users/divyarani/Documents/geekforgeeks/geeks.js"
// Use stat() method
fs.stat(path, (err, stats) => {
if ( !err ){
if (stats.isFile()){
console.log( 'is file ? ' + stats.isFile());
}
else if (stats.isDirectory()){
console.log( 'is directory? ' + stats.isDirectory());
}
}
else
throw err;
});

Выход:

 это файл? правда