NodeJs 深入浅出之旅:文件系统
Fs 文件系统
在 node 中可以使用 fs 模块来对文件进行读写等操作。其实有关于fs文件系统
模块最好的学习方法就是查看官方API
官方网址:http://nodejs.cn/api/fs.html#file-system
fs 读写文件有封装好的方法,这些方法也分为同步读写和异步读写(一般而言都会使用异步读写进行操作)。
读写文件操作
同步读取 readFileSync
小知识: 在查看 API 时会发现 options 参数是被
[]
包括的,使用[]
包裹的参数是可选参数
例子:
异步读取 readFile
异步读取方法比之前多了一个回调函数callback
, API: fs.readFile(path[, options], callback)
并且在回调函数中,第一个参数是 err 错误信息,原因是异步执行分成两段,在两段之间抛出异常和错误程序无法直接捕获,只能当做参数传入第二段
例子:
如果需要读取多个文件,使用嵌套的方法进行读取很容易产生回调地狱,所以可以使用Promise
、async
、await
来进行封装编写
在下面的readList
中,上一个文件中的内容就是获取下次一要读取的文件名称
文件写入 writeFile
有了文件读取,当然也就存在文件写入,这里就不介绍同步写入writeFileSync
方法了
writeFile
方法有四个参数
例子:同样可以使用Promise
、async
、await
避免写入回调地狱
删除文件 unlink
对于文件有了读写后,如果不需要此文件了,也可以通过unlink
方法进行删除
异步删除unlink
只有两个参数, path 和 callback
除了以上这几个方法外,还有对目录进行操作的mkdir
和rmdir
, 此外还有别的东西,当然这些内容大多数能否熟练掌握还是需要平时多写和多看 API
readline 逐行读取
readline 模块提供了用于从可读流(例如 process.stdin)每次一行地读取数据的接口。
下面的例子中,input 和 output 代表输入输出
可以通过 question 方法来编写输入信息
效果:
如果需要输入多条命令,可以对 question 进行封装。
使用readline
就可以在终端中对 node 进行简单的交互操作了
例子:这是一个存入多条信息到 txt 中的实例
效果:
小知识:
在操作时,如果觉得 readline 依旧不够方便,可以使用
inquirer
,这是一个用来实现命令行交互式界面的工具集合。安装: yarn add inquirer
使用
inquirer
进行登录的例子const inquirer = require('inquirer') var questions = [ { type: 'input', name: 'name', message: "您的用户名?", default: 'kcj' },{ type: 'password', name: 'password', message: "您的密码?", mask: true, // 校验 校验通过返回true会继续走下去 回调函数內传递两个参数,第一个是用户输入的参数,第二个是之前所有会话的答案 validate: (val, proval)=>{ if (val != '123') { return '您的密码错误,请重试'; } else { return true; } }, } ] function verificate() { return inquirer.prompt(questions).then(answers => { if (answers['name'] == 'kcj') console.log(` 您好 ${answers['name']}! \n 欢迎登录`); else { console.log('您的账号不存在,请重试'); return verificate(); // 重新从输入用户名开始校验 } }) }
效果:
输入正确
输入错误
对于文件内容的写入与读取还可以考虑以流的形式
一般来说对于小文件,读取和写入都可以直接使用上面的readFile
和writeFile
。
但是大文件还是需要使用fs.createReadStream
和fs.createWriteStream
版权声明: 本文为 InfoQ 作者【空城机】的原创文章。
原文链接:【http://xie.infoq.cn/article/8ddc6d88345e4daa41c794577】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论