Node.js程序中的本地文件操作用法小结
来源: 阅读:934 次 日期:2016-07-22 16:38:58
温馨提示: 小编为您整理了“Node.js程序中的本地文件操作用法小结”,方便广大网友查阅!

Node最引以为傲的就是它有一个非常小的核心。有一些语言绑定了完整的POSIX API,而 Node实现了尽可能少的绑定,并通过同步、异步或流API形式暴露他们。

这种方法意味着,操作系统中有一些非常方便的功能,需要在Node中重建。这是一个教你如何使用文件系统软件包的实用教程。

引用文件

与文件系统的交互很重要的一点是要指向正确的文件。由于NPM的包使用相对路径引用,所以你不能把路径写死在代码。有两个主要方式来以确保包能引用到正确的文件:

// 使用 `path.join()` 而不是 `+` 确保Windows也能正常工作

const path = require('path')

// 找到基于调用点的相对路径,对于命令行程序(CLI applications)非常实用

path.join(process.cwd(), 'my-dynamic-file')

// 或者

path.resolve('my-dynamic-file')

// 基于一个文件找到另外一个文件

path.join(__dirname, 'my-package-file')

读取文件

在节点中的异步读取文件的最简单方法就是使用流!下面是一个例子:

const path = require('path')

const fs = require('fs')

// read a file and pipe it to the console

fs.createReadStream(path.join(__dirname, 'my-file'))

 .pipe(process.stdout)

创建文件

创建文件也并不是很难,这里有一个用node实现的cat命令:

const path = require('path')

const fs = require('fs')

// cat ./my-file > ./my-other-file

fs.createReadStream(path.join(__dirname, 'my-file'))

 .pipe(fs.createWriteStream(path.join(__dirname, './my-other-file')))

删除文件

在Shell脚本中删除的文件和目录通常使用 rm-rf 命令。NodeJS中一个 rimraf 也实现了相同的功能:

const rimraf = require('rimraf')

const path = require('path')

rimraf(path.join(__dirname, './my-directory'), err => {

 if (err) throw err

})

创建目录

创建跟删除文件很相似,使用 mkdirp 包

const mkdirp = require('mkdirp')

const path = require('path')

mkdirp(path.join(__dirname, 'foo/bar'), err => {

 if (err) throw err

})

查找文件

使用 readdirp 查找当前目录下的文件:

const readdirp = require('readdirp')

const json = require('JSONStream')

const path = require('path')

// recursively print out all files in all subdirectories

// to the command line. The object stream must be

// stringified before being passed to `stdout`.

readdirp({ root: path.join(__dirname) })

 .pipe(json.stringify())

 .pipe(process.stdout)

使用findup查找当前父级目录中的文件:

const findup = require('findup')

const path = require('path')

// recurse up all files relative to __dirname and find

// all `package.json` files.

findup(path.join(__dirname), 'package.json', (err, res) => {

 if (err) throw err

 console.log('dir is: ' + res)

})

关于管道(pipes)

在管道中对整个数据流的错误进行一次处理非常。而不用对每个单独的数据流使用 .on('error', cb) :

const pump = require('pump')

const fs = require('fs')

// oh no, no errors are handled!

fs.createReadStream('./in.file').pipe(fs.createWriteStream('./out.file'))

// that's better, we're handing errors now

const rs = fs.createReadStream('./in.file')

const ws = fs.createWriteStream('./out.file')

pump(rs, ws, err => {

 if (err) throw err

})

更多信息请查看网络编程
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:hfpxwx
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map