Node.js程序中的本地文件操作用法小結(jié)
Node最引以為傲的就是它有一個(gè)非常小的核心。有一些語(yǔ)言綁定了完整的POSIX API,而 Node實(shí)現(xiàn)了盡可能少的綁定,并通過(guò)同步、異步或流API形式暴露他們。
這種方法意味著,操作系統(tǒng)中有一些非常方便的功能,需要在Node中重建。這是一個(gè)教你如何使用文件系統(tǒng)軟件包的實(shí)用教程。
引用文件
與文件系統(tǒng)的交互很重要的一點(diǎn)是要指向正確的文件。由于NPM的包使用相對(duì)路徑引用,所以你不能把路徑寫死在代碼。有兩個(gè)主要方式來(lái)以確保包能引用到正確的文件:
// 使用 `path.join()` 而不是 `+` 確保Windows也能正常工作 const path = require('path') // 找到基于調(diào)用點(diǎn)的相對(duì)路徑,對(duì)于命令行程序(CLI applications)非常實(shí)用 path.join(process.cwd(), 'my-dynamic-file') // 或者 path.resolve('my-dynamic-file') // 基于一個(gè)文件找到另外一個(gè)文件 path.join(__dirname, 'my-package-file')
讀取文件
在節(jié)點(diǎn)中的異步讀取文件的最簡(jiǎn)單方法就是使用流!下面是一個(gè)例子:
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)
創(chuàng)建文件
創(chuàng)建文件也并不是很難,這里有一個(gè)用node實(shí)現(xiàn)的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中一個(gè) rimraf 也實(shí)現(xiàn)了相同的功能:
const rimraf = require('rimraf') const path = require('path') rimraf(path.join(__dirname, './my-directory'), err => { if (err) throw err })
創(chuàng)建目錄
創(chuàng)建跟刪除文件很相似,使用 mkdirp 包
const mkdirp = require('mkdirp') const path = require('path') mkdirp(path.join(__dirname, 'foo/bar'), err => { if (err) throw err })
查找文件
使用 readdirp 查找當(dāng)前目錄下的文件:
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查找當(dāng)前父級(jí)目錄中的文件:
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) })
關(guān)于管道(pipes)
在管道中對(duì)整個(gè)數(shù)據(jù)流的錯(cuò)誤進(jìn)行一次處理非常。而不用對(duì)每個(gè)單獨(dú)的數(shù)據(jù)流使用 .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 })
相關(guān)文章
初步使用Node連接Mysql數(shù)據(jù)庫(kù)
這篇文章主要介紹了Node連接Mysql數(shù)據(jù)庫(kù)的詳細(xì)步驟,思路清晰,幫助大家快速使用Node連接Mysql數(shù)據(jù)庫(kù),感興趣的小伙伴們可以參考一下2016-03-03npm?install報(bào)錯(cuò)unable?to?resolve?dependency?tree的解決辦法
在開發(fā)過(guò)程中經(jīng)常會(huì)使用npm安裝依賴包來(lái)加速開發(fā),但是在執(zhí)行npm install命令時(shí),有時(shí)會(huì)遇到各種錯(cuò)誤,下面這篇文章主要給大家介紹了關(guān)于npm?install報(bào)錯(cuò)unable?to?resolve?dependency?tree的解決辦法,需要的朋友可以參考下2023-05-05node快速搭建后臺(tái)的實(shí)現(xiàn)步驟
本文主要介紹了node快速搭建后臺(tái),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12node.js中的fs.exists方法使用說(shuō)明
這篇文章主要介紹了node.js中的fs.exists方法使用說(shuō)明,本文介紹了fs.exists方法說(shuō)明、語(yǔ)法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下2014-12-12解決node終端下運(yùn)行js文件不支持ES6語(yǔ)法
這篇文章主要介紹了解決node終端下運(yùn)行js文件不支持ES6語(yǔ)法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04express搭建的nodejs項(xiàng)目使用webpack進(jìn)行壓縮打包
對(duì)于打包這個(gè)問(wèn)題它并不是難點(diǎn),但是對(duì)于我們這種初學(xué)者來(lái)說(shuō),根本就不知道應(yīng)該怎么做,下面這篇文章主要給大家介紹了關(guān)于express搭建的nodejs項(xiàng)目使用webpack進(jìn)行壓縮打包的相關(guān)資料,需要的朋友可以參考下2022-12-12