Node.js程序中的本地文件操作用法小结
作者:bea
Node最引以为傲的就是它有一个非常小的核心。有一些语言绑定了完整的POSIX API,而 Node实现了尽可能少的绑定,并通过同步、异步或流API形式暴露他们。 这种方法意味着,操作系统中有一些非常方便的功能,需要在Node中重建。这是一个教你如何使用文件系统软件包的实用教程。 引用文件 与文件系统的交互很重要的一点是要指向正确的文件。由于NPM的包使用相对路径引用,所以你不能把路径写死在代码。有两个主要方式来以确保包能引用到正确的文件: // 使用 `path.jo
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
})
有用 | 无用
这种方法意味着,操作系统中有一些非常方便的功能,需要在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
})
有用 | 无用
猜你喜欢
您可能感兴趣的文章:
- JavaScript实现带播放列表的音乐播放器实例分享
- 详解JavaScript数组和字符串中去除重复值的方法
- JavaScript实现字符串与日期的互相转换及日期的格式化
- JavaScript中将数组进行合并的基本方法讲解
- Bootstrap每天必学之日期控制
- JavaScript过滤字符串中的中文与空格方法汇总
- jquery+json实现分页效果
- 利用JQuery写一个简单的异步分页插件
- 基于jquery编写分页插件
- JavaScript快速切换繁体中文和简体中文的方法及网站支持简繁体切换的绝招
- javascript特殊日历控件分享
- 基于JavaScript实现快速转换文本语言(繁体中文和简体中文)
- 论JavaScript模块化编程
- js日期插件dateHelp获取本月、三个月、今年的日期
- 不定义JQuery插件 不要说会JQuery
- javascript数组去重小结
- 详解JS正则replace的使用方法
- 浅谈javascript中的call、apply、bind
- 一波JavaScript日期判断脚本分享