这篇文章主要介绍nodejs中fs模块的使用,以方便遍历目录,操作文件。
首先是引入fs模块:
var fs = require('fs')
接下来引进path模块,方便存储文件路径:
const path = require('path')
现在便可以指定文件路径,操作文件了,例如现在我们想读取日志文件,不同的日志文件都在/home/ubuntu/test目录下,且都以.INFO作为后缀名,若想读取文件,先记录日志位置:
var logpath = path.join('/home/ubuntu/test')
readlogdir(path.join(logpath))
这两句话的目的就是将要搜索的文件目录记录在logpath变量下,之后执行一个函数,该函数要读取目录下信息,参数自然就是刚刚记录的路径变量,所以接下的工作是编写readlogdir函数体,读取目录下信息:
function readlogdir(path){
fs.readdir(path,function(err,menu){
if(!menu)
return;
menu.forEach(function(ele){
fs.stat( path+"/"+ele , function(err,info){
if(info.isDirectory()){
//todo:
}else{
//is file
if((ele.substring(ele.lastIndexOf('.')+1)) == "INFO"){
fs.open(path+"/"+ele,'r',function(err,fd){
if(err){
return console.error(err)}
fs.read(fd,clusterBuffer,0,clusterBuffer.length,0,function(err,bytes){
if(err){
console.log(err) }
console.log(clusterBuffer.slice(0,bytes).toString())
if(bytes > 0){
//todo..
}
})//fs.read
})//fs.open
}//if
}
})//fs.stat
})//menu.forEach
})//fs.readdir
}
逐行解释一下上述代码:第二行readdir函数读取目录下信息,menu作为对象返回信息,这些信息包含了目录下的一切,比如子目录、文件等。第5行则遍历menu,目录下的每个对象(文件、子目录等)都是一个ele,第6行则获取ele的状态,接下来我们根据ele的状态是目录还是文件进行判断,如果是文件,对应代码第9行,我们判断文件的后缀是否是INFO,如果是通过fs.read函数读取文件,将文件信息读取到clusterBuffer中,在这里我的clusterBuffer是我自己开辟的一个数组,即var clusterBuffer = new Array().最后,文件的信息已经记录到了clusterBuffer里,我们便可以操作这个对象或者操作字符串来截取文件中我们想要的信息了。