首頁 >web前端 >js教程 >Node.js程式中的本機檔案操作用法小結_node.js

Node.js程式中的本機檔案操作用法小結_node.js

WBOY
WBOY原創
2016-05-16 15:11:481584瀏覽

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
})


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn