溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

NodeJS遍歷文件生產(chǎn)文件列表功能示例

發(fā)布時間:2020-09-19 22:45:26 來源:腳本之家 閱讀:137 作者:小小平凡世界 欄目:web開發(fā)

本文實例講述了NodeJS遍歷文件生產(chǎn)文件列表功能。分享給大家供大家參考,具體如下:

功能需求:在工作中我們可能經(jīng)常需要知道項目中靜態(tài)文件列表發(fā)布,一個一個去檢索寫,那就太苦逼了。

NodeJS遍歷文件生產(chǎn)文件列表功能示例

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

這里分享一下,通過node,知道文件路徑,并配置遠程路徑,直接copy,發(fā)布。

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

var fs = require("fs");
//path模塊,可以生產(chǎn)相對和絕對路徑
var path = require("path");
//配置遠程路徑
var remotePath = "/resource/fd/promote/201507/qixi/";
//獲取當前目錄絕對路徑,這里resolve()不傳入?yún)?shù)
var filePath = path.resolve();
//讀取文件存儲數(shù)組
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系統(tǒng)是”/“,Windows系統(tǒng)是”\“
    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系統(tǒng)是”/“,Windows系統(tǒng)是”\“
           //  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];
}
//獲取文件數(shù)組
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())這種形式利用自身函數(shù),會報錯
          //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("寫入成功");
  });
}

當我們執(zhí)行

node flielist.js

就會生產(chǎn)filelist.txt,文件里面就包含了我們想要的路徑。

NodeJS遍歷文件生產(chǎn)文件列表功能示例

有時,我們通常遇到刪除不了的文件,由于文件縱深太長導致 rm _rf也刪不了,但是我們通過nodejs可以辦到:

var fs = require("fs");
var path = require("path");
deleteFolderRecursive = function(url) {
  var files = [];
  //判斷給定的路徑是否存在
  if( fs.existsSync(url) ) {
    //返回文件和子目錄的數(shù)組
    files = fs.readdirSync(url);
    files.forEach(function(file,index){
      // var curPath = url + "/" + file;
      var curPath = path.join(url,file);
      //fs.statSync同步讀取文件夾文件,如果是文件夾,在重復觸發(fā)函數(shù)
      if(fs.statSync(curPath).isDirectory()) { // recurse
        deleteFolderRecursive(curPath);
      // 是文件delete file  
      } else { 
        fs.unlinkSync(curPath);
      }
    });
    fs.rmdirSync(url);
  }else{
    console.log("給定的路徑不存在,請給出正確的路徑");
  }
};
deleteFolderRecursive("./grunt");

希望本文所述對大家nodejs程序設計有所幫助。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI