国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

Node.js程序中的本地文件操作用法小結

2019-11-20 10:26:30
字體:
來源:轉載
供稿:網友

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 consolefs.createReadStream(path.join(__dirname, 'my-file')) .pipe(process.stdout)

創建文件
創建文件也并不是很難,這里有一個用node實現的cat命令:

const path = require('path')const fs = require('fs')// cat ./my-file > ./my-other-filefs.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 nowconst rs = fs.createReadStream('./in.file')const ws = fs.createWriteStream('./out.file')pump(rs, ws, err => { if (err) throw err})


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 夏河县| 灯塔市| 合山市| 宜宾市| 沅陵县| 抚顺县| 宜兰市| 襄汾县| 望奎县| 江西省| 合肥市| 苏州市| 怀柔区| 宁河县| 长宁区| 渭源县| 昌邑市| 福海县| 德安县| 湟中县| 忻州市| 友谊县| 金溪县| 江陵县| 三穗县| 霍山县| 安吉县| 神池县| 元氏县| 玉溪市| 通山县| 天台县| 邯郸县| 邛崃市| 永福县| 巨鹿县| 巨鹿县| 游戏| 吉林省| 香格里拉县| 井研县|