📜  如何检查给定路径是 node.js 中的文件还是目录?

📅  最后修改于: 2022-05-13 01:56:44.623000             🧑  作者: Mango

如何检查给定路径是 node.js 中的文件还是目录?

有时需要检查给定的路径是文件还是目录,以便根据结果执行不同的操作。例如,分别记录目录和文件的信息。
在 Node.js 中,文件处理由 fs 模块处理。你可以在这里读更多关于它的内容。我们可以通过同步和异步方式检查 Node.js 中文件或目录的路径。

注意:如果您关心应用程序性能,通常最好使用异步版本。

同步方法:同步操作非常适合在返回模块之前执行一次性文件/目录操作。要在 fs 模块中检查同步模式下的路径,我们可以使用 statSync() 方法。 fs.statSync(path) 方法返回分配给变量 stats 的 fs.Stats 的实例。 fs.Stats 对象提供有关文件的信息。如果文件路径是 File,stats.isFile() 方法返回 true,否则返回 false。如果文件路径是目录,则 stats.isDirectory() 方法返回 true,否则返回 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());

输出:

is file ? true
is directory ? true

示例 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());

输出:

is file ? false
is directory ? false

异步方法:在异步版本中,函数内的代码块对最终用户来说大部分是非阻塞的,并且不会阻止用户对各个子进程执行不同的操作。要在 fs 模块中以异步模式检查路径,我们可以使用 fs.stat() 方法。 fs.stat() 方法有两个参数,第一个参数是路径,第二个参数是回调函数,有两个参数,一个是错误发生时的错误,第二个参数是调用 fs.stat() 检索到的数据存储在 stats 变量中的方法。如果文件路径是 File,stats.isFile() 方法返回 true,否则返回 false。如果文件路径是目录,则 stats.isDirectory() 方法返回 true,否则返回 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; 
});

输出:

is directory? true

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

输出:

is file ? true