NodeJS遍历文件生产文件列表功能示例

发布时间 - 2026-01-10 22:43:43    点击率:

本文实例讲述了NodeJS遍历文件生产文件列表功能。分享给大家供大家参考,具体如下:

功能需求:在工作中我们可能经常需要知道项目中静态文件列表发布,一个一个去检索写,那就太苦逼了。

要想知道里面的文件列表是不是很蛋疼,可能我们也会有dos tree去获取。

这里分享一下,通过node,知道文件路径,并配置远程路径,直接copy,发布。

新建filelist.js 里面都有注释,我就不哆嗦了.

var fs = require("fs");
//path模块,可以生产相对和绝对路径
var path = require("path");
//配置远程路径
var remotePath = "/resource/fd/promote/201507/qixi/";
//获取当前目录绝对路径,这里resolve()不传入参数
var filePath = path.resolve();
//读取文件存储数组
var fileArr = [];
//读取文件目录
fs.readdir(filePath,function(err,files){
  if(err){
    console.log(err);
    return;
  }
  var count = files.length;
  //console.log(files);
  var results = {};
  files.forEach(function(filename){
    //filePath+"/"+filename不能用/直接连接,Unix系统是”/“,Windows系统是”\“
    fs.stat(path.join(filePath,filename),function(err, stats){
      if (err) throw err;
      //文件
      if(stats.isFile()){
        if(getdir(filename) == 'html'){
          var newUrl=remotePath+filename;
          fileArr.push(newUrl);
          writeFile(fileArr);
        }
        // (getdir(filename) == 'html')&&(fileArr.push(filename);writeFile(newUrl));
      //  console.log("%s is file", filename);
      }else if(stats.isDirectory()){
        // console.log("%s is a directory文件目录", filename);
         //返回指定文件名的扩展名称 
         //console.log(path.extname("pp/index.html"));
         if(filename == 'css' || filename == 'images'){
//var readurl = filePath+'/'+filename;
             //filePath+"/"+filename不能用/直接连接,Unix系统是”/“,Windows系统是”\“
           //  console.log(path.join(filePath,filename));
             var name = filename;
             readFile(path.join(filePath,filename),name);
         }
      }
    });
  });
});
//获取后缀名
function getdir(url){
  var arr = url.split('.');
  var len = arr.length;
  return arr[len-1];
}
//获取文件数组
function readFile(readurl,name){
  console.log(name);
  var name = name;
  fs.readdir(readurl,function(err,files){
    if(err){console.log(err);return;}
    files.forEach(function(filename){
     // console.log(path.join(readurl,filename));
      fs.stat(path.join(readurl,filename),function(err, stats){
        if (err) throw err;
        //是文件
        if(stats.isFile()){
          var newUrl=remotePath+name+'/'+filename;
          fileArr.push(newUrl);
          writeFile(fileArr)
        //是子目录
        }else if(stats.isDirectory()){
          var dirName = filename;
          readFile(path.join(readurl,filename),name+'/'+dirName);
          //利用arguments.callee(path.join())这种形式利用自身函数,会报错
          //arguments.callee(path.join(readurl,filename),name+'/'+dirName);
        }
      });
    });
  });
}
// 写入到filelisttxt文件
function writeFile(data){
  var data = data.join("\n");
  fs.writeFile(filePath+"/"+"filelist.txt",data+'\n',function(err){
    if(err) throw err;
    console.log("写入成功");
  });
}

当我们执行

node flielist.js

就会生产filelist.txt,文件里面就包含了我们想要的路径。

有时,我们通常遇到删除不了的文件,由于文件纵深太长导致 rm _rf也删不了,但是我们通过nodejs可以办到:

var fs = require("fs");
var path = require("path");
deleteFolderRecursive = function(url) {
  var files = [];
  //判断给定的路径是否存在
  if( fs.existsSync(url) ) {
    //返回文件和子目录的数组
    files = fs.readdirSync(url);
    files.forEach(function(file,index){
      // var curPath = url + "/" + file;
      var curPath = path.join(url,file);
      //fs.statSync同步读取文件夹文件,如果是文件夹,在重复触发函数
      if(fs.statSync(curPath).isDirectory()) { // recurse
        deleteFolderRecursive(curPath);
      // 是文件delete file  
      } else { 
        fs.unlinkSync(curPath);
      }
    });
    fs.rmdirSync(url);
  }else{
    console.log("给定的路径不存在,请给出正确的路径");
  }
};
deleteFolderRecursive("./grunt");

希望本文所述对大家nodejs程序设计有所帮助。


# NodeJS  # 遍历  # 文件  # 文件列表  # 详解Linux环境下NodeJS的安装配置(HelloWorld)  # Docker + Nodejs + Kafka + Redis + MySQL搭建简单秒杀环境  # Linux下Nodejs安装步骤(完整详细)  # 简单实现nodejs上传功能  # 基于NodeJS+MongoDB+AngularJS+Bootstrap开发书店案例分析  # 学习 NodeJS 第八天:Socket 通讯实例  # 解析NodeJs的调试方法  # 详解NodeJs支付宝移动支付签名及验签  # nodejs基础知识  # NodeJS实现客户端js加密  # 不能用  # 就会  # 都有  # 会有  # 那就  # 就不  # 不是很  # 要想  # 给大家  # 不存在  # 当我们  # 报错  # 太长  # 所述  # 在工作中  # 程序设计  # 是否存在  # 太苦 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复  Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】  JS实现鼠标移上去显示图片或微信二维码  Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)  详解CentOS6.5 安装 MySQL5.1.71的方法  Windows Hello人脸识别突然无法使用  HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】  Laravel API资源类怎么用_Laravel API Resource数据转换  想要更高端的建设网站,这些原则一定要坚持!  海南网站制作公司有哪些,海口网是哪家的?  瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口  Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】  ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】  Laravel如何实现一对一模型关联?(Eloquent示例)  Win11关机界面怎么改_Win11自定义关机画面设置【工具】  个人网站制作流程图片大全,个人网站如何注销?  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  Laravel怎么在Controller之外的地方验证数据  Laravel如何实现多对多模型关联?(Eloquent教程)  Laravel如何使用Blade组件和插槽?(Component代码示例)  微信小程序 scroll-view组件实现列表页实例代码  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置  Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录  标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南  HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】  如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框  微信公众帐号开发教程之图文消息全攻略  javascript事件捕获机制【深入分析IE和DOM中的事件模型】  laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  Linux系统命令中screen命令详解  WordPress 子目录安装中正确处理脚本路径的完整指南  EditPlus中的正则表达式 实战(4)  如何在服务器上三步完成建站并提升流量?  通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  ,怎么在广州志愿者网站注册?  制作公司内部网站有哪些,内网如何建网站?  北京网站制作公司哪家好一点,北京租房网站有哪些?  Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置  高防服务器:AI智能防御DDoS攻击与数据安全保障  C++用Dijkstra(迪杰斯特拉)算法求最短路径  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  b2c电商网站制作流程,b2c水平综合的电商平台?  Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】  小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像