【问题标题】:How to get the first file with a .txt extension in a directory with nodejs?如何在 nodejs 目录中获取第一个扩展名为 .txt 的文件?
【发布时间】:2017-05-10 08:13:28
【问题描述】:

我所有文件所在的目录是:'/usr/home/jordan',我在下面有很多文件(在目录本身中,但有一个文件以 .txt 扩展名命名。

使用 nodejs 和 fs,我想将带有 txt 扩展名的第一个文件(或任何文件)放入“mytxtfilepath”。我在整个目录中只有一个 .txt 文件(在许多其他文件中,但具有不同的扩展名) 单个 .txt 文件可以命名为任何名称,我不能保证在任何给定时间名称将是什么,只能以它结尾.txt:

var homedir = "/usr/home/jordan";
var mytxtfilepath=homedir + "???????";
fs.readfile(mytxtfilepath, function(err,data) {
  console.log(data);
});

如何在不硬编码 txt 文件本身的名称的情况下将正确的路径放入我的 txt 文件?

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:
    var files = fs.readdirSync(homedir);
    var path = require('path');
    
    for(var i in files) {
       if(path.extname(files[i]) === ".txt") {
           //do something
       }
    }
    

    【讨论】:

    • 我的目录有多个文件,但只有一个.txt文件。
    • @dandavis 从什么时候开始filter 比循环快?从什么时候正则表达式比精确比较快?你错了。
    • @polkovnikov.ph: path.extname() 是用户空间,然后运行速度比 rx.test() 慢。因为一直比过滤器快,否则我不会争辩...
    【解决方案2】:

    您也可以使用Glob Module。对我来说很好用!

    var glob = require( 'glob' );  
    var myPath= "/fileFolder/**/*.txt";
    
    glob(myPath, function (er, files) {
        // Files is an array of filenames.
        // Do something with files.
    })
    

    【讨论】:

      【解决方案3】:

      您可以使用fs.readdir 列出文件并找到以.txt 结尾的文件:

      var myPath = "/usr/home/jordan";
      fs.readdir(path, function(fileNames) {
          for(var i = 0; i < fileNames.length; i++) {
            var fileName = fileNames[i];
            if(path.extname(fileName) === ".txt") {
              fs.readfile(path.join(myPath,fileName), function(err,data) {
                console.log(data);
              });
              break;
            }
          }
        }
      );
      

      注意这需要path,所以在顶部添加var path = require("path")

      【讨论】:

        【解决方案4】:

        您可以使用fs.readdirpath.extname

        var fs = require('fs')
          , path = require('path');
        
        function getFileWithExtensionName(dir, ext) {
          fs.readdir(dir, function(files){
            for (var i = 0; i < files.length; i++) {
              if (path.extname(files[i]) === '.' + ext)
                return files[i]
            }
          });
        }
        
        var homedir = "/usr/home/jordan";
        var mytxtfilepath= getFileWithExtensionName(homedir, 'txt')
        fs.readfile(mytxtfilepath, function(err,data) {
          console.log(data);
        });
        

        【讨论】:

        • 我用这个方法得到TypeError: path must be a string(在调整上面使用readFile而不是readfile之后)
        【解决方案5】:

        懒惰的解决方案:

        npm install --save readdir
        

        然后

        const {read} = require('readdir');
        read("/usr/home/jordan", "**/*.txt", (err, paths) =>
            console.log(paths)
        );
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-09-01
          • 2012-08-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-27
          • 1970-01-01
          • 2018-01-08
          相关资源
          最近更新 更多