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 })
相关文章
- 这篇文章主要介绍了linux服务器快速卸载安装node环境(简单上手),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-22
- 这篇文章主要为大家详细介绍了Node实现搜索框进行模糊查询,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-06-28
- 这篇文章主要介绍了smartupload实现文件上传时获取表单数据的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2017-01-09
- 这篇文章主要介绍了Node.js程序中的本地文件操作用法小结,作为运行在服务器端的JavaScript解释器,Node中自然拥有操作本地文件的方法,需要的朋友可以参考下...2016-03-09
- 我们了解到,Node采用了事件驱动机制,而EventEmitter就是Node实现事件驱动的基础,本文主要介绍了node.js自定义实现EventEmitter,感兴趣的可以了解一下...2021-07-17
- 有段时间没用npm了,新建个项目,需要改变npm全局包默认安装的路径,本文就来介绍一下node自定义安装更改npm全局模块默认安装路径的步骤,感兴趣的可以了解下...2021-09-14
- 这篇文章主要介绍了如何用Node.js编写内存效率高的应用程序,对Node.js感兴趣的同学,可以参考下...2021-05-01
Node+Express+MongoDB实现登录注册功能实例
这篇文章主要介绍了Node+Express+MongoDB实现登录注册功能,需要的朋友可以参考下...2017-04-27- 最简单粗暴的通信方式是 Nodejs调用一下 Python 脚本,本文详细介绍了Nodejs与Python 双向通信的实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-07-17
- 本篇文章主要介绍了Node.js之网络通讯模块实现浅析,具有一定的参考价值,有兴趣的可以了解一下。 ...2017-04-03
- 本篇文章主要介绍了Javascript使用uploadify来实现多文件上传,具有一定的参考价值,有需要的可以了解一下。 ...2016-11-22
- 这篇文章主要介绍了node中短信api实现验证码登录的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-01-20
- Request是一个Node.jsNPM模块,它是一个HTTP客户端,使用简单功能确十分强大...2017-05-09
- 这篇文章主要介绍了node中使用shell脚本的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-21
DevExpress实现自定义TreeListNode的Tooltip的方法
这篇文章主要介绍了DevExpress实现自定义TreeListNode的Tooltip的方法,需要的朋友可以参考下...2020-06-25vue+node+socket io实现多人互动并发布上线全流程
这篇文章主要介绍了vue+node+socket io实现多人互动并发布上线全流程,本文给大家提到了socket.io相关用法概览及开发流程,需要的朋友可以参考下...2021-09-26- 下面小编就为大家带来一篇mysql查询结果输出到文件的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2017-01-15
- 很多人都不知道什么是内网穿透,就是公网客户端,可以访问局域网内的服务,本文详细的介绍了原理以及实现,需要的朋友们下面随着小编来一起学习学习吧...2021-05-20
- 这篇文章主要介绍了探索node之事件循环的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-30
node.js使用express-fileupload中间件实现文件上传
本文使用express作为服务端,使用express-fileupload库提供的中间件函数来接受从客户端传来的图片,并将图片作为文件存储在服务端,感兴趣的可以了解一下...2021-07-17