OurJS


OurJS-我们的JS, 我们的技术-IT文摘; 专注JS相关领域;
我们热爱编程, 我们热爱技术;我们是高大上, 有品味的码农;

欢迎您订阅我们的技术周刊


我们会向您分享我们精心收集整理的,最新的行业资讯,技术动态,外文翻译,热点文章;
我们使用第三方邮件列表向您推送,我们不保存您的任何个人资料,注重您的隐私,您可以随时退订,

欢迎分享您的观点,经验,技巧,心得

让我们一起找寻程序员的快乐,探索技术, 发现IT人生的乐趣;


本网站使用缓存技术每次加载仅需很小流量, 可在手机中流畅浏览;
如果您发现任何BUG,请即时告知我们: ourjs(at)ourjs.com

掌握Node.js的文件系统[File System 基础]


分享到
分类 JS学习   关键字 Node.JS   发布 ourjs  1444293219582
注意 转载须保留原文链接,译文链接,作者译者等信息。  
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)
})


注* 稳健性

虽然我从来没有用过,但我听说有个 node-graceful-fs 的包也很不错。它有重试,队列和其他一些好东西。

注* 关于管道(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
})
原文地址: 点此
社区评论 ( Beta版 )
OnceDoc 您自己的企业内容管理系统——文档、流程、知识库、报表、网盘All In One

访问404页面,寻找丢失儿童
 热门文章 - 分享最多
  1. JavaScript正在变成Web界的C++
  2. QRCode:用纯JavaScript实现的微信二维码图片生成器
  3. ES6中的Map与JSON的相互转化(序列和持久化)
  4. JavaScript也有getter/setter方法:ES5 Object对象的5个不为人知的特性
  5. Stop-Server:用手机关闭你的电脑
  6. 编写高扩展性JavaScript的几个技巧(一)
  7. AirJD-简单好用的免费建站工具

 相关阅读 - JS学习
  1. JavaScript也有getter/setter方法:ES5 Object对象的5个不为人知的特性
  2. ES6中的Map与JSON的相互转化(序列和持久化)
  3. 用jQuery和JavaScript深度复制JSON对象的方法
  4. Node.js中的通用基础设计模式
  5. WowJS:在滚动页面时添加动画效果的简单实现
  6. [PPT]JavaScript初级教程
  7. JavaScript中的哈希表(Hash Maps的最佳实践)
  8. 我是怎么从顾虑到热爱ReactJS的(与AngularJS经典MVC数据绑定的对比)
  9. JSON序列化(stringify)对象时排除某些属性的两种方法
  10. JavaScript变量作用域(Variable Scope)和闭包(closure)的基础知识

 关键字 - Node.JS
  1. Node.js框架之express
  2. 在nodejs中使用Redis缓存和查询数据及Session持久化(Express)
  3. Node.JS编码规范指南教程:教你优雅地写JavaScript代码
  4. Express入门教程:一个简单的博客
  5. NodeJS动态传参特性:不定个数参数的省略,默认值与解构
  6. Debug调试Node.JS:我们是如何定位内存泄漏和无限循环的
  7. 6款基于Node.JS的开源内容管理和静态网站生成系统
  8. Node.JS中如何判断递归嵌套的所有回调函数已经执行完毕,以读取目录下所有文件为例:计数比Promise方式快将近一倍
  9. Node.js网页抓取:一个最简单的http请求客户端示例(request client)
  10. 为什么你应该抛弃Express的视图渲染引擎

 欢迎订阅 - 技术周刊

我们热爱编程, 我们热爱技术; 我们是高端, 大气, 上档次, 有品味, 时刻需要和国际接轨的码农; 欢迎您订阅我们的技术周刊; 您只需要在右上角输入您的邮箱即可; 我们注重您的隐私,您可以随时退订.
加入我们吧! 让我们一起找寻码农的快乐,探索技术, 发现IT人生的乐趣;


 关注我们

我们的微信公众号: ourjs-com
打开微信扫一扫即可关注我们:
IT文摘-程序员(码农)技术周刊

ourjs官方微信号