Как проверить, что указанный путь - это файл или каталог в node.js?
Иногда возникает необходимость проверить, является ли указанный путь файлом или каталогом, чтобы в зависимости от результата можно было выполнять различные операции. Например, чтобы записать информацию о каталоге и файле отдельно.
В 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; }); |
Выход:
это файл? правда