宝哥软件园

浅析Node.js查找字符串功能

编辑:宝哥软件园 来源:互联网 时间:2021-09-10

需求如下:

整个目录下大概有40几m,文件无数,由于时间久了,记不清那个字符串具体在哪个文件,于是。强大,亮瞎双眼的Node.js闪亮登场:

窗子下安装Node.js和安装普通软件毫无差别,装完后打开Node.js的快捷方式,或者直接cmd,你懂的。

创建findString.js

var path=require(' path ');var fs=require(' fs ');var文件路径=进程。argv[2];var lookingForString=process。argv[3];递归文件(文件路径);函数recursiveReadFile(fileName){if(!fs.existsSync(文件名))返回;if(IsFIle(FIlename)){ check(FIlename);} if(IsDirectory(FIlename)){ var files=fs。ReadDirsync(文件名);files.forEach(函数(val,key){ var temp=路径。联接(fileName,val);如果(是目录(temp))recursiveReadFile(temp);if (isFile(temp))检查(温度);})} }函数检查(文件名){ var data=read file(文件名);var exc=new RegExp(lookingForString);if(exc。测试(数据))控制台。日志(FIlename);}函数是目录(FIlename){ if(fs。existssync(FIlename))返回fs.statSync(fileName).isDirectory();}函数IsFIle(FIlename){ if(fs。existssync(FIlename))返回fs.statSync(fileName).isFIle();}函数readFile(FIlename){ if(fs。existssync(FIlename))返回fs.readFileSync(fileName,' utf-8 ');}

两个参数:第一个参数为"文件夹名称"第二个参数为"你要查找的字符串"

如图:

panfanglin

打印出文件路径,完事,收工。速度实在是彪悍,亮瞎双眼。如果采用爪哇岛全文搜索,你惨了.

Nodejs查找,读写文件

(1),路径处理

1.首先,我们需要注意的文件路径的规范化,nodejs给我们提供了小路模块诺莫里泽方法能帮我们规范化路径:

var path=require(' path ');路径。正常化('/foo/bar/nor/FAZ/');- /foo/bar/nor2 .当然还有加入合并路径:

var path=require(' path ');path.join('/foo ',' bar ',' baz/asdf ',' quux ','.');-/foo/bar/baz/asdf3 .解析路径

var path=require(' path ');path.resolve('/foo/bar ',' ./baz ';-/foo/bar/baz路径。resolve('/foo/bar ','/tmp/file/');-/tmp/file4 .在两个相对路径间查找相对路径

var path=require(' path ');路径。相对('/data/orandea/test/AAA ','/data/orandea/impl/BBB ');-././impl/bbb5 .抽离路径

var path=require(' path ');路径。dirname('/foo/bar/baz/asdf/quux。txt’);-/foo/bar/baz/asdf====================var path=require(' path ');路径。base name('/foo/bar/baz/asdf/quux。html ')-quux。超文本标记语言

甚至你还还可以将后缀名去掉,只需要在基本名称中传入第二个参数,参数为后缀名,例如:

var path=require(' path ');

路径。base name('/foo/bar/baz/asdf/quux。html ',' .html ');-quux

当然文件路径中可能会存在各种不同的文件,我们不可能硬编码后缀来得到我们想要的结果,

所以有一个方法能帮我们得到后缀名:

路径。extname('/a/b/index。html ');//='.'' html '

路径。扩展名('/a/b . c/index ');//=''

path . ext name('/a/b . c/');//=''

路径。分机名称('/a/b . c/d ');//='.'

(2),文件处理

var fs=require(' fs ');

1.判断文件是否存在

fs.exists(路径,函数(存在){ });

上面的接口为异步操作的,因此有回调函数,在回调中可以处理我们的各种操作,如果需要同步操作可以用下面的方法:

fs.existsSync(路径);

2.读取文件状态信息

fs.stat(路径,函数(错误,统计){ if(err){ throw err;}控制台。日志(统计数据);});控制台输出州的内容大致如下:

{ dev: 234881026,ino: 95028917,mode: 33188,nlink: 1,uid : 0 0,GID : 0 0 0,rdev : 0 0 0,size: 5086,blksize: 4096,blocks:atime 3360 Fri,2011年11月18日同时,统计数据还具有一些方法,比如:

统计数据。isFIle();统计数据。is directority();统计数据。is blockdevice();统计数据。isacterdevice();统计数据。issymbolelink();统计数据。is FIFO();统计数据。is socket();读写文件fs.open('/path/to/file ',' r ',function(err,FD){//todo });

第二个参数为操作类型:

r :只读

r :读写

w :重写文件

w :重写文件,如果文件不存在则创建

a :读写文件,在文件末尾追加

a :读写文件,如果文件不存在则创建

下面为一个读取文件的小例子:

var fs=require(' fs ');fs.open(' ./nodeRead.html ',' r ',函数打开(err,FD){ if(err){ throw err } var readBuffer=new Buffer(1024),bufferOffset=0,bufferLength=readBuffer.length,filePosition=100fs.read(fd,readBuffer,bufferOffset,bufferLength,filePosition,函数read(err,read bytes){ if(err){ throw err;} console.log('只需读取readBytes ' bytes ');if(读取字节0){ console。日志(readbuffer。切片(0,读取字节));} });});下面为一个写文件的小例子:

var fs=require(' fs ');fs.open(' ./my_file.txt ',' a ',函数已打开(err,FD){ if(err){ throw err;} var写Buffer=new Buffer(' hello,world!'),bufferPosition=0,缓冲长度=写缓冲。length,filePosition=nullfs.write(fd,writeBuffer,bufferPosition,bufferLength,filePosition,function(err,writed){ if(err){ throw err;}控制台。日志(‘write’writed‘bytes’);});});对于文件的读写操作,我们不应该忘记在这些操作都完成之后执行关闭操作,即close();下面是一个封装的方法,其中就包括了文件的后期关闭操作,使用起来方便:

var fs=require(' fs ');函数openAndWriteToSystemLog(写缓冲区,回调){ fs.open(' ./my_file ',' a ',函数(err,FD){ if(err){ return callback(err);}函数notifyError(err){ fs。close(FD),function(){ callback(err);});} var bufferOffset=0,缓冲区长度=写缓冲区。length,filePosition=nullfs.write(fd,writeBuffer,bufferOffset,bufferLength,filePosition,function(err,writed){ if(err){ return notify err(err);} fs.close(fd,function(){ callback(err);});});});}openAndWriteToSystemLog(新缓冲区('写入此字符串')、函数(err) { if (err) { console.log('打开和写入:时出错呃。消息);返回;} console.log('全部完成,没有错误');});

更多资讯
游戏推荐
更多+