最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Node.js fs模塊原理及常見用途

 更新時(shí)間:2020年10月22日 09:34:08   作者:酷兒q  
這篇文章主要介紹了Node.js fs模塊原理及常見用途,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

JavaScript 的是沒有操作文件的能力,但是 Node 是可以做到的,Node 提供了操作文件系統(tǒng)模塊,是 Node 中使用非常重要和高頻的模塊,是絕對(duì)要掌握的一個(gè)模塊系統(tǒng)。

fs 模塊提供了非常多的接口,這里主要說一下一些常用的接口。

1.常用API快速?gòu)?fù)習(xí)

fs.stat 檢測(cè)是文件還是目錄

const fs = require('fs')
fs.stat('hello.js', (error,stats)=>{
  if(error) {
    console.log(error)
  } else {
    console.log(stats)
    console.log(`文件:${stats.isFile()}`)
    console.log(`目錄:${stats.isDirectory()}`)
  }
})

fs.mkdir 創(chuàng)建目錄

const fs = require('fs')
fs.mkdir('logs', error => {
  if(error) {
    console.log(error)
  } else {
    console.log('目錄創(chuàng)建成功!')
  }
})

fs.rmdir 刪除目錄

const fs = require('fs')
fs.rmdir('logs', error => {
  if(error) {
    console.log(error)
  } else {
    console.log('成功刪除了目錄 logs')
  }
})

fs.writeFile 創(chuàng)建寫入文件

const fs = require('fs')
fs.writeFile('logs/hello.log','您好~\n', error => {
  if(error) {
    console.log(error)
  } else {
    console.log('成功寫入文件');
  }
})

fs.appendFile 追加文件

const fs = require('fs')
fs.appendFile('logs/hello.log','hello~\n', error => {
  if(error) {
    console.log(error)
  } else {
    console.log('成功寫入文件');
  }
})

fs.readFile 讀取文件

const fs = require('fs')
fs.readFile('logs/hello.log','utf-8', (error, data) => {
  if(error) {
    console.log(error)
  } else {
    console.log(data);
  }
})

fs.unlink 刪除文件

const fs = require('fs')
fs.unlink(`logs/${file}`, error => {
  if(error) {
    console.log(error)
  } else {
    console.log(`成功刪除了文件: ${file}`)
  }
})

fs.readdir 讀取目錄

const fs = require('fs')
fs.readdir('logs', (error, files) => {
  if(error) {
    console.log(error)
  } else {
    console.log(files);
  }
})

fs.rename 重命名,還可以更改文件的存放路徑

const fs = require('fs')
fs.rename('js/hello.log', 'js/greeting.log', error => {
  if(error) {
    console.log(error)
  } else {
    console.log('重命名成功')
  }
})

2.第三方npm包 mkdirp 的使用

mkdirp不僅可以創(chuàng)建文件夾,還可以創(chuàng)建多層的文件夾,類似 mkdir -p 命令

midir -p tmp/foo/bar/baz

上述命令也可以在當(dāng)前目錄創(chuàng)建多層幾文件夾。

如下代碼在當(dāng)前目錄生成多層級(jí)文件夾

const mkdirp = require('mkdirp')
mkdirp('tmp/foo/bar/baz').then(made => console.log(`創(chuàng)建目錄于: ${made}`))
// 創(chuàng)建目錄于: /Users/zhangbing/github/CodeTest/Node/fs/tmp

3.實(shí)戰(zhàn)舉例

實(shí)戰(zhàn)1

判斷服務(wù)器上面有沒有 upload 目錄。如果沒有就創(chuàng)建這個(gè)目錄,如果有的話不做操作

const fs = require('fs')

const path = './upload'
fs.stat(path, (err, data) => {
  if(err) {
    // 執(zhí)行創(chuàng)建目錄
    mkdir(path)
    return
  }
  if(data.isDirectory()) {
    console.log('upload目錄存在');
  }else{
    // 首先刪除文件,再去執(zhí)行創(chuàng)建目錄
    fs.unlink(path, err => {
      if(!err) {
        mkdir(path)
      }
    })
  }
})

function mkdir(dir) {
  fs.mkdir(dir, err => {
    if(err) {
      console.log(err);
      return
    }
  })
}

實(shí)戰(zhàn)2

wwwroot 文件夾下面有 images css js 以及 index.html, 找出 wwwroot 目錄下面的所有的目錄,然后放在一個(gè)數(shù)組中

使用同步方法方式

const fs = require('fs')
const path = './wwwroot'
const dirArr = []

const dirs = fs.readdirSync(path)
dirs.forEach(item => {
  if(fs.statSync(path + '/' + item).isDirectory()) {
    dirArr.push(item)
  }
})
console.log('dirArr', dirArr)
// dirArr [ 'css', 'images', 'js' ]

使用 async/await 方式

const fs = require('fs')
const path = './wwwroot'
const dirArr = []

function isDir(path) {
  return new Promise((resolve, reject) => {
    fs.stat(path, (error, stats) => {
      if(error) {
        console.log(error)
        reject(error)
        return
      }
      if(stats.isDirectory()) {
        resolve(true)
      } else {
        resolve(false)
      }
    })
  })
}

function main(){
  fs.readdir(path, async (error, data) => {
    if(error) {
      console.log(error)
      return
    } else {
      for(let i = 0; i < data.length; i++) {
        if(await isDir(path + '/' + data[i])) {
          dirArr.push(data[i])
        }
      }
      console.log('dirArr', dirArr)
    }
  })
}

main() // dirArr [ 'css', 'images', 'js' ]

4.管道流

管道提供了一個(gè)輸出流到輸入流的機(jī)制。通常我們用于從一個(gè)流中獲取數(shù)據(jù)并將數(shù)據(jù)傳遞到另外一個(gè)流中。以下實(shí)例我們通過讀取一個(gè)文件內(nèi)容并將內(nèi)容寫入到另外一個(gè)文件中。

const fs = require("fs")
//創(chuàng)建一個(gè)可讀流
const readerStream = fs.createReadStream('input.txt')
//創(chuàng)建一個(gè)可寫流
const writerStream = fs.createWriteStream('output.txt')
//管道讀寫操作
//讀取input.txt文件內(nèi)容,并將內(nèi)容寫入到output.txt文件中
readerStream.pipe(writerStream)
console.log("程序執(zhí)行完畢")

fs.createReadStream 從文件流中讀取數(shù)據(jù)

const fs = require('fs')
const fileReadStream = fs.fileReadStream('demo1.js')
let count = 0
let str = ''
fileReadStream.on('data', chunk => {
  console.log(`${++count}接收到:${chunk.length}`)
  str += chunk
})
fileReadStream.on('end', () => {
  console.log('---結(jié)束---')
  console.log(count + ',' + star)
})
fileReadStream.on('error', error => {
  console.log(error)
})

fs.createWriteStream 寫入文件

const fs = require("fs")
const data ='我是從數(shù)據(jù)庫(kù)獲取的數(shù)據(jù),我要保存起來'
//創(chuàng)建一個(gè)可以寫入的流,寫入到文件output.txt中
const writerStream = fs.createWriteStream('output.txt')
//使用utf8編碼寫入數(shù)據(jù)
writerStream.write(data,'UTF8')
//標(biāo)記文件末尾
writerStream.end()
//處理流事件-->finish事件
writerStream.on('finish', () => {
/*finish-所有數(shù)據(jù)已被寫入到底層系統(tǒng)時(shí)觸發(fā)。*/
console.log("寫入完成。")
})
writerStream.on('error', err => {
console.log(err.stack);
})
console.log("程序執(zhí)行完畢")

實(shí)戰(zhàn):復(fù)制圖片

在項(xiàng)目根目錄有一張圖片2020.png,把它復(fù)制到 /wwwroot/images 中

代碼如下

const fs = require("fs")

const readStream = fs.createReadStream('./2020.png')
const writeStream = fs.createWriteStream('./wwwroot/images/2021.png')

readStream.pipe(writeStream)

需要特別注意的是,fs.createWriteStream 要寫入的目錄一定要帶上要復(fù)制的文件名,也就是不能寫成 fs.createWriteStream('./wwwroot/images/') 否則在 macOS 下會(huì)報(bào)如下錯(cuò)誤:

Error: EISDIR: illegal operation on a directory, open <directory>

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • node.js+jQuery實(shí)現(xiàn)用戶登錄注冊(cè)AJAX交互

    node.js+jQuery實(shí)現(xiàn)用戶登錄注冊(cè)AJAX交互

    本篇文章主要介紹了用Node.js當(dāng)作后臺(tái)、jQuery寫前臺(tái)AJAX代碼實(shí)現(xiàn)用戶登錄和注冊(cè)的功能的相關(guān)知識(shí)。具有很好的參考價(jià)值。下面跟著小編一起來看下吧
    2017-04-04
  • nodeJs編寫錯(cuò)誤處理中間件問題

    nodeJs編寫錯(cuò)誤處理中間件問題

    這篇文章主要介紹了nodeJs編寫錯(cuò)誤處理中間件問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 理解Koa2中的async&await的用法

    理解Koa2中的async&await的用法

    這篇文章主要介紹了理解Koa2中的async&await的用法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-02-02
  • Nodejs處理異常操作示例

    Nodejs處理異常操作示例

    這篇文章主要介紹了Nodejs處理異常操作,結(jié)合實(shí)例形式分析了nodejs針對(duì)異常的捕獲與處理相關(guān)操作技巧,需要的朋友可以參考下
    2018-12-12
  • 淺談Node.js 沙箱環(huán)境

    淺談Node.js 沙箱環(huán)境

    本篇文章主要介紹了Node.js 沙箱環(huán)境 ,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-05-05
  • NodeJs環(huán)境安裝與配置的實(shí)現(xiàn)步驟

    NodeJs環(huán)境安裝與配置的實(shí)現(xiàn)步驟

    本文主要介紹了NodeJs環(huán)境安裝與配置,包括配置環(huán)境和配置國(guó)內(nèi)鏡像,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01
  • 參考?EventEmitter實(shí)現(xiàn)一個(gè)簡(jiǎn)單的訂閱發(fā)布功能函數(shù)

    參考?EventEmitter實(shí)現(xiàn)一個(gè)簡(jiǎn)單的訂閱發(fā)布功能函數(shù)

    這篇文章主要為大家介紹了參考?EventEmitter實(shí)現(xiàn)一個(gè)簡(jiǎn)單的訂閱發(fā)布功能函數(shù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • Node.js通過配置?strict-ssl=false解決npm安裝卡住問題

    Node.js通過配置?strict-ssl=false解決npm安裝卡住問題

    使用npm安裝依賴包是常見的任務(wù)之一,有時(shí)會(huì)遇到安裝卡住的問題,本文就來介紹一下通過配置?strict-ssl=false解決npm安裝卡住問題,感興趣的可以了解一下
    2024-12-12
  • nodeJs實(shí)現(xiàn)基于連接池連接mysql的方法示例

    nodeJs實(shí)現(xiàn)基于連接池連接mysql的方法示例

    這篇文章主要介紹了nodeJs實(shí)現(xiàn)基于連接池連接mysql的方法,結(jié)合具體實(shí)例形式分析了nodejs連接池操作mysql數(shù)據(jù)庫(kù)連接的實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下
    2018-02-02
  • Nodejs 復(fù)制文件/文件夾的方法

    Nodejs 復(fù)制文件/文件夾的方法

    這篇文章主要介紹了Nodejs 復(fù)制文件/文件夾的方法,需要的朋友可以參考下
    2017-08-08

最新評(píng)論

辽宁省| 神农架林区| 宝鸡市| 依兰县| 南郑县| 朔州市| 北海市| 鄂托克旗| 建湖县| 沙洋县| 马边| 河池市| 甘孜县| 无棣县| 南雄市| 商都县| 黄山市| 汝阳县| 古田县| 托里县| 饶阳县| 金堂县| 志丹县| 靖边县| 桑日县| 石首市| 增城市| 屏东县| 黄浦区| 商城县| 皋兰县| 佳木斯市| 宁陵县| 东海县| 曲周县| 保亭| 桑日县| 钟山县| 无棣县| 克东县| 株洲市|