本篇文章给大家介绍一下Nodejs中的文件操作(创建和删除目录/文件、重命名、追加内容、读取内容),以及简单聊聊stream(流)。
NodeJS文件操作
NodeJS
除了在网络方面大放异彩,它还可以对文件进行操作,按逻辑上来说只要我们合理运用这些api
再加上一些数据处理,我们就可以完成本地很多的操作。【推荐学习:《nodejs 教程》】- 在上一篇我们知道如果想引用一个模块则需要使用到
require
,而今天要介绍的主角是fs
模块,也就是NodeJS
内置的一个文件模块,这个模块有很多的API
供我们使用。
创建目录和文件
- 我们可以使用
fs.mkdir
fs.writeFile
来分别创建目录和文件。 mkdir()
可以接收三个参数,第一个是路径,第二个是个可选项代表权限,这个我们一般不需要,第三个参数是一个回调函数,我们可以在这里面做一些处理。
/* learnNode.js */ let fs = require('fs'); fs.mkdir('js',(err)=>{ if(err){ console.log('出错') }else{ console.log('未出错') } })
writeFile()
可以接收四个参数,第一个是路径,第二个是文件内容,第三个可选项代表权限,第四个是回调函数。
/* learnNode.js */ let fs = require('fs'); fs.writeFile('./js/newJs.js','console.log("写入这个")',(err)=>{ if(err){ console.log('出错') }else{ console.log('没出错') } })
- 可以看到我们成功创建了目录并写入了一个文件。
检测文件
- 我们可以通过
fs.stat
来检测一个路径的文件是为目录还是文件,进而可以做一些操作。
/* learnNode.js */ let fs = require('fs'); fs.stat('./js/newJs.js', (error, stats) => { if(error) { console.log(error); return false; } else { console.log(`是否文件:${stats.isFile()}`); console.log(`是否目录:${stats.isDirectory()}`); return false; } })
- star()主要接收两个参数第一个是要检测的文件,第二个是一个回调函数,这个回调函数有两个参数,分别是
err
错误和stats
对象,这个对象提供有关文件的信息,我们可以对这个对象信息来进行判断。
删除文件和删除目录
- 既然我们可以使用
NodeJS
创建文件那当然我们也可以删除文件,主要使用的是fs.unlink``fs.rmdir
这两个API
。
/* learnNode.js */ let fs = require('fs'); fs.unlink('./js/newJs.js', (err) => { if (err) throw err; console.log('文件已删除'); }); fs.rmdir('./js',(err)=>{ if (err) throw err; console.log('目录已删除'); })
- 这两个
API
都分别接收两个参数是路径和回调函数,执行node learnNode.js
可以看到我们文件已经成功删除。
重命名
- 我们可以使用
fs.rename
来对文件重命名。
/* learnNode.js */ let fs = require('fs'); fs.rename('oldJs.js','newJs.js',(err)=>{ if(err){ console.log('出错') }else{ console.log('未出错') } })
rename()
可以接收三个参数第一个是路径第二个是更改的名称,第三个是回调函数,值得注意的是,如果第一个参数和第二个参数对应的文件所在的位置不一样时,他不会重命名之前那个文件而是直接把文件剪切放到另一个地方。
/* learnNode.js */ let fs = require('fs'); fs.rename('newJs.js','./js/oldJs.js',(err)=>{ if(err){ console.log('出错') }else{ console.log('剪切到js文件夹内了') } })
追加内容
- 上面我们说到创建文件的时候可以顺便写入东西,那么我们可不可以直接在文件追加文字呢?我们可以使用
fs.appendFile
。
/* learnNode.js */ let fs = require('fs'); fs.appendFile('newJs.txt','我是追加的内容',(err)=>{ if(err){ console.log('出错') }else{ console.log('追加内容') } })
appendFile()
可以接收三个参数,第一个是路径,第二个是内容,第三个是回调函数,执行node learnNode.js
即可。
读取文件和读取目录
- 以上都是对文件进行增删改的操作,我们现在还需要掌握一下读取内容,我们可以使用
fs.readFile
和fs.readdir
分别读取文件和读取目录。
/* learnNode.js */ let fs = require('fs'); fs.readFile('newJs.txt', (err, data) => { if(err) { console.log('出错'); } else { console.log("读取文件成功!"); console.log(data); } })
/* learnNode.js */ let fs = require('fs'); fs.readdir('./', (err, data) => { if(err) { console.log('出错'); } else { console.log("读取目录成功!"); console.log(data); } })
- 可以看到我们两个
API
都是接收两个参数,第一个是路径,第二个是回调函数,这个回调函数也有两个参数里面包含了data
信息,我们可以打印这个data
信息来获取内容。
stream(流)
- 最后我们来简单聊聊
stream
,翻译过来就是流
的意思,提到流你会想到什么,河流,水流,都是从一个源头到另一个源头,就像水龙头从开关到流到地面,stream
也是这样一个过程。 - Stream 有四种流类型:
- Readable – 可读操作。
- Writable – 可写操作。
- Duplex – 可读可写操作.
- Transform – 操作被写入数据,然后读出结果。
- 在stream的过程中,我们也有事件可以使用,比如检测到错误触发的
error
,有数据时触发的data
。- data – 当有数据可读时触发。
- end – 没有更多的数据可读时触发。
- error – 在接收和写入过程中发生错误时触发。
- finish – 所有数据已被写入到底层系统时触发。
- 接下来简单举个例子理解一下吧。
读取流
var fs = require("fs"); var data = ''; // 创建可读流 var readerStream = fs.createReadStream('newJs.txt'); // 设置编码为 utf8。 readerStream.setEncoding('UTF8'); // 处理流事件 遇到有数据时执行这个 readerStream.on('data', function(chunk) { data += chunk; console.log(chunk,'流遇到数据了') }); // 处理流事件 流结束时执行这个 readerStream.on('end',function(){ console.log(data,'流结束了'); }); // 处理流事件 流报错时执行这个 readerStream.on('error', function(err){ console.log(err.stack); }); console.log("程序执行完毕");
- 我们一开始可以创建一个可读流
fs.createReadStream()
,参数是你要读的文件路径。 - 当遇到了数据时会执行
readerStream.on('data',callback())
,如下图所示。 - 当流结束时会执行
readerStream.on('end',callback())
,如下图所示。
写入流
- 我们上面演示了如何通过流读取一个文件,接下来我们试试通过流写入文件。
var fs = require("fs"); var data = '我是小卢,我再写入流'; // 创建一个可以写入的流,写入到文件 newJs.txt 中 var writerStream = fs.createWriteStream('newJs.txt'); // 使用 utf8 编码写入数据 writerStream.write(data,'UTF8'); // 标记文件末尾 writerStream.end(); // 处理流事件 完成和报错时执行 writerStream.on('finish', function() { console.log("写入完毕"); }); writerStream.on('error', function(err){ console.log(err.stack); }); console.log("程序执行完毕");
- 我们首先创建一个流,然后将
data
数据写入newJs.txt
文件中。 - 当流写入完毕时会执行
readerStream.on('finish',callback())
,如下图所示。
- 可以看到该
newJs.txt
文件中已经存在了我们写入的数据。
写在最后
总的来说NodeJS
提供了fs
文件操作模块,这个模块有很多的API
,上面只是简单的展示了一下,还有很多有趣的API
大家只需要用到的时候去官网查就好了,因为NodeJS
能操作文件,小至文件查找,大至代码编译。换个角度讲,几乎也只需要一些数据处理逻辑,再加上一些文件操作,就能够编写出大多数前端工具。
更多编程相关知识,请访问:编程视频!!
以上就是快速带你入门Nodejs的文件操作和stream(流)的详细内容,更多请关注亿码酷站其它相关文章!
快速带你入门Nodejs的文件操作和stream(流)
—–文章转载自PHP中文网如有侵权请联系ymkuzhan@126.com删除
转载请注明来源:快速带你入门Nodejs的文件操作和stream(流)
本文永久链接地址:https://www.ymkuzhan.com/38637.html
本文永久链接地址:https://www.ymkuzhan.com/38637.html
下载声明:
本站资源如无特殊说明默认解压密码为www.ymkuzhan.com建议使用WinRAR解压; 本站资源来源于用户分享、互换、购买以及网络收集等渠道,本站不提供任何技术服务及有偿服务,资源仅提供给大家学习研究请勿作它用。 赞助本站仅为维持服务器日常运行并非购买程序及源码费用因此不提供任何技术支持,如果你喜欢该程序,请购买正版! 版权声明:
下载本站资源学习研究的默认同意本站【版权声明】若本站提供的资源侵犯到你的权益,请提交版权证明文件至邮箱ymkuzhan#126.com(将#替换为@)站长将会在三个工作日内为您删除。 免责声明:
您好,本站所有资源(包括但不限于:源码、素材、工具、字体、图像、模板等)均为用户分享、互换、购买以及网络收集而来,并未取得原始权利人授权,因此禁止一切商用行为,仅可用于个人研究学习使用。请务必于下载后24小时内彻底删除,一切因下载人使用所引起的法律相关责任,包括但不限于:侵权,索赔,法律责任,刑事责任等相关责任,全部由下载人/使用人,全部承担。以上说明,一经发布视为您已全部阅读,理解、同意以上内容,如对以上内容持有异议,请勿下载,谢谢配合!支持正版,人人有责,如不慎对您的合法权益构成侵犯,请联系我们对相应内容进行删除,谢谢!