<acronym id="indot"><dfn id="indot"></dfn></acronym>
<span id="indot"></span>

<bdo id="indot"><meter id="indot"></meter></bdo>
<label id="indot"><samp id="indot"></samp></label>
<label id="indot"><xmp id="indot">
  • <span id="indot"><table id="indot"></table></span>
    <center id="indot"><optgroup id="indot"></optgroup></center>
  • <bdo id="indot"><meter id="indot"></meter></bdo>
      當(dāng)前位置:首頁(yè) > javascript > nodejs > 正文內(nèi)容

      nodejs 文件操作類(lèi)的封裝

      hxing6411年前 (2024-04-03)nodejs3727

      最近做node項(xiàng)目,操作文件特別不方便,于是封裝了工具類(lèi)挺好用的,分享給大家

      const fs = require('fs')
      const path = require('path')
      /**
       * 文件/目錄操作封裝工具
       */
      class File {
      constructor(fs, path) {
      this.fs = fs
      this.path = path
      }
      /**
       * 重命名文件/目錄:可移動(dòng)文件/目錄到指定位置,如果是目錄也包含其子文件
       */
      rename(filePath, newFilePath) {
      return new Promise((resolve, reject) => {
      this.fs.rename(filePath, newFilePath, err => {
      if (err) {
      reject(err)
      } else {
      resolve()
      }
      })
      })
      }
      /**
       * 獲取該目錄的體積大小
       * @param {Object} dir 目錄路徑
       */
      async getDirSize(dir) {
      let size = 0
      const info = await this.stat(dir)
      //如果是文件
      if (info.isFile()) {
      size += info.size
      } else {
      //如果是目錄
      //獲取目錄下的文件
      const files = await this.readdir(dir)
      for (let i = 0; i < files.length; i++) {
      size += await this.getDirSize(this.path.join(dir, files[i]))
      }
      }
      return size
      }
      /**
       * 讀取文件內(nèi)容
       * @param {Object} filePath 文件路徑
       */
      readFile(filePath) {
      return new Promise((resolve, reject) => {
      this.fs.readFile(filePath, 'utf8', (err, data) => {
      if (err) {
      reject(err)
      } else {
      resolve(data)
      }
      })
      })
      }
      /**
       * 寫(xiě)入文本內(nèi)容:覆蓋原內(nèi)容
       * @param {Object} filePath 文件路徑
       * @param {Object} text 寫(xiě)入的文本內(nèi)容
       */
      writeFile(filePath, text) {
      return new Promise((resolve, reject) => {
      this.fs.writeFile(filePath, text, err => {
      if (err) {
      reject(err)
      } else {
      resolve()
      }
      })
      })
      }
      /**
       * 文件寫(xiě)入內(nèi)容:追加
       * @param {Object} filePath 文件路徑
       * @param {Object} text 寫(xiě)入的文本內(nèi)容
       */
      appendFile(filePath, text) {
      return new Promise((resolve, reject) => {
      this.fs.appendFile(filePath, text, err => {
      if (err) {
      reject(err)
      } else {
      resolve()
      }
      })
      })
      }
      /**
       * 拷貝文件
       * @param {Object} filePath 文件路徑
       * @param {Object} copyFilePath 復(fù)制后的文件路徑
       */
      copyFile(filePath, copyFilePath) {
      return new Promise((resolve, reject) => {
      this.fs.copyFile(filePath, copyFilePath, err => {
      if (err) {
      reject(err)
      } else {
      resolve()
      }
      })
      })
      }
      /**
       * 打開(kāi)文件
       * @param {Object} filePath 文件路徑
       * @param {Object} mode 模式:r(讀取模式,r+(讀寫(xiě)模式),w(寫(xiě)入模式,如果文件不存在則創(chuàng)建),w+(讀寫(xiě)模式,如果文件不存在則創(chuàng)建),wx(寫(xiě)入模式,如果文件不存在則返回失敗),wx+(讀寫(xiě)模式,如果文件不存在則返回失敗),a(追加模式,如果文件不存在則創(chuàng)建),a+(讀取追加模式,如果文件不存在則創(chuàng)建),ax(追加模式,如果文件不存在則返回失敗),ax+(讀取追加模式,如果文件不存在則返回失敗)
       */
      openFile(filePath, mode) {
      return new Promise((resolve, reject) => {
      this.fs.open(filePath, mode, (err, fd) => {
      if (err) {
      reject(err)
      } else {
      resolve(fd)
      }
      })
      })
      }
      /**
       * 關(guān)閉文件
       * @param {Object} fd 打開(kāi)文件時(shí)返回的文件標(biāo)識(shí)符
       */
      closeFile(fd) {
      return new Promise((resolve, reject) => {
      this.fs.close(fd, (fd, err) => {
      if (err) {
      reject(err)
      } else {
      resolve()
      }
      })
      })
      }
      /**
       * 查看文件或者目錄的操作權(quán)限,可讀寫(xiě)返回true,否則返回false,文件不存在也返回false
       * @param {Object} filePath 文件路徑
       */
      access(filePath) {
      return new Promise(resolve => {
      this.fs.access(filePath, this.fs.constants.R_OK | this.fs.constants.W_OK, err => {
      if (err) {
      resolve(false) //不可訪(fǎng)問(wèn)
      } else {
      resolve(true) //可讀寫(xiě)
      }
      })
      })
      }
      /**
       * 獲取文件/目錄信息
       * @param {Object} filePath 文件或者目錄路徑
       */
      stat(filePath) {
      return new Promise((resolve, reject) => {
      this.fs.stat(filePath, (err, obj) => {
      if (err) {
      reject(err)
      } else {
      resolve(obj)
      }
      })
      })
      }
      /**
       * 判斷文件/目錄是否存在
       * @param {Object} filePath 文件或者目錄路徑
       */
      exist(filePath) {
      return new Promise((resolve, reject) => {
      this.fs.exists(filePath, exist => {
      if (exist) {
      resolve(true)
      } else {
      resolve(false)
      }
      })
      })
      }
      /**
       * 創(chuàng)建目錄
       * @param {Object} dir 目錄路徑
       */
      mkdir(dir) {
      return new Promise((resolve, reject) => {
      this.fs.mkdir(dir, err => {
      if (err) {
      reject(err)
      } else {
      resolve()
      }
      })
      })
      }
      /**
       * 遞歸創(chuàng)建目錄
       * @param {Object} dir 目錄路徑
       */
      mkdirs(dir) {
      return new Promise(async (resolve, reject) => {
      this.exist(dir).then(exist => {
      if (exist) {
      //如果目錄存在
      resolve()
      } else {
      //目錄不存在
      this.mkdirs(this.path.dirname(dir))
      .then(() => {
      return this.mkdir(dir)
      })
      .then(() => {
      resolve()
      })
      .catch(err => {
      reject(err)
      })
      }
      })
      })
      }
      /**
       * 讀取目錄下的所有文件列表
       * @param {Object} dir 目錄路徑
       */
      readdir(dir) {
      return new Promise((resolve, reject) => {
      this.fs.readdir(dir, (err, data) => {
      if (err) {
      reject(err)
      } else {
      resolve(data)
      }
      })
      })
      }
      /**
       * 刪除目錄:只能刪除空目錄
       * @param {Object} dir 目錄路徑
       */
      rmdir(dir) {
      return new Promise((resolve, reject) => {
      this.fs.rmdir(dir, err => {
      if (err) {
      reject(err)
      } else {
      resolve()
      }
      })
      })
      }
      /**
       * 遞歸刪除目錄:直接刪除目錄下的所有文件
       * @param {Object} dir
       */
      async rmdirs(dir) {
      const files = await this.readdir(dir)
      if (files.length == 0) {
      await this.rmdir(dir)
      } else {
      for (let i = 0; i < files.length; i++) {
      const info = await this.stat(dir + this.path.sep + files[i])
      if (info.isDirectory()) {
      await this.rmdirs(dir + this.path.sep + files[i])
      } else {
      await this.rmFile(dir + this.path.sep + files[i])
      }
      }
      this.rmdirs(dir)
      }
      }
      /**
       * 刪除文件
       * @param {Object} filePath 文件路徑
       */
      rmFile(filePath) {
      return new Promise((resolve, reject) => {
      this.fs.unlink(filePath, err => {
      if (err) {
      reject(err)
      } else {
      resolve()
      }
      })
      })
      }
          /**
       * 獲取文件后綴名
       * @param {Object} filePath 文件路徑
       */
          getExt(filePath) {
              return path.extname(filePath).toLowerCase().slice(1); // 去除前面的點(diǎn)號(hào)
          }
          /**
       * 獲取文件不含后綴名
       * @param {Object} filePath 文件路徑
       */
          getName(filePath) {
              return path.parse(filePath).name;
          }
      }
      module.exports = new File(fs, path)


      使用方法:

      (async function () {
          const file = require('file.js')  // 引入后直接使用
          await file.rename('test.txt', 'text1.txt')
      })()



      掃描二維碼推送至手機(jī)訪(fǎng)問(wèn)。

      版權(quán)聲明:本文由星星博客發(fā)布,如需轉(zhuǎn)載請(qǐng)注明出處。

      本文鏈接:http://www.7811333.com/?id=527

      “nodejs 文件操作類(lèi)的封裝” 的相關(guān)文章

      koa設(shè)置響應(yīng)頭

      設(shè)置響應(yīng)頭async function responseTime(ctx, next) {   const start = Date.now();   await next()...

      Node.js中的并發(fā)編程:利用事件循環(huán)實(shí)現(xiàn)高效多任務(wù)處理

      在Node.js中,利用事件驅(qū)動(dòng)的非阻塞I/O模型,我們可以輕松地實(shí)現(xiàn)并發(fā)編程,高效地處理多個(gè)任務(wù)。本文將介紹Node.js中的并發(fā)編程概念、常用的實(shí)現(xiàn)方式以及相關(guān)代碼示例,并總結(jié)如何通過(guò)事件循環(huán)來(lái)實(shí)現(xiàn)高效的多任務(wù)處理。 一、并發(fā)編程概念...

      npm安裝時(shí)報(bào)錯(cuò),出現(xiàn) certificate has expired

      最近使用npm安裝工具屢屢報(bào)錯(cuò),大致顯示為:npm ERR! request to https://registry.npm.taobao.org/cnpm failed, reason: certificate has expired.從報(bào)錯(cuò)信息就可以知道是因?yàn)槟阒霸O(shè)置的淘寶鏡像已過(guò)期,解決方法...

      評(píng)論列表

      https://501h.com/heji/15184.html
      9個(gè)月前 (11-04)

      看到你的文章,我仿佛感受到了生活中的美好。

      https://501h.com/fugu/17637.html
      8個(gè)月前 (11-08)

      你的文章讓我感受到了正能量,非常棒!

      www.4006400989.com
      8個(gè)月前 (11-16)

      你的文章讓我感受到了生活的美好,謝謝! http://www.55baobei.com/8065BmugHl.html

      傳奇sf
      傳奇sf IP:湖北省
      8個(gè)月前 (11-20)

      原始傳奇禮包怎么獲取?:https://501h.com/jinbi/11025.html

      114影院
      114影院 IP:湖北省
      8個(gè)月前 (11-22)

      《驅(qū)邪》劇情片高清在線(xiàn)免費(fèi)觀看:https://www.jgz518.com/xingkong/33257.html

      新開(kāi)傳奇私服
      7個(gè)月前 (01-03)

      在什么情況下可以使用傲游瀏覽器的翻譯功能?:https://www.tcqinfeng.com/news/5705.html

      傳奇私服
      傳奇私服 IP:湖北省
      7個(gè)月前 (01-06)

      陳小春代言的傳奇:付費(fèi)暢玩?:https://501h.com/jingpin/10606.html

      發(fā)表評(píng)論

      訪(fǎng)客

      ◎歡迎參與討論,請(qǐng)?jiān)谶@里發(fā)表您的看法和觀點(diǎn)。
      主站蜘蛛池模板: 亚洲综合无码一区二区三区| 天天久久影视色香综合网| 六月丁香激情综合成人| 一97日本道伊人久久综合影院| 国产精品亚洲综合久久| 九九综合九九综合| 亚洲一区综合在线播放| 99v久久综合狠狠综合久久| 国产成人综合精品一区| 色综合天天做天天爱| 久久综合精品国产一区二区三区| 久久婷婷香蕉热狠狠综合| 狠狠色丁香久久婷婷综合蜜芽五月 | 亚洲欧美日韩综合俺去了| 区二区三区激情综合| AV色综合久久天堂AV色综合在| 亚洲狠狠爱综合影院婷婷| 色天使亚洲综合在线观看| 99热婷婷国产精品综合| 成人综合国产乱在线| 中文字幕亚洲综合小综合在线| 伊人久久大香线蕉综合Av | 综合网日日天干夜夜久久| 国产精品成人免费综合| 91精品国产色综合久久不卡蜜| 天堂无码久久综合东京热| 国产精品亚洲综合一区在线观看| 激情综合网五月激情| 色777狠狠狠综合| 久久99国产综合精品免费| 亚洲精品天天影视综合网| 色婷婷综合久久久久中文| 亚洲综合久久成人69| 亚洲综合色一区二区三区小说| 狠狠色综合久色aⅴ网站| 日韩欧国产精品一区综合无码| 色噜噜狠狠狠综合曰曰曰| 亚洲综合一区二区国产精品| 五月丁香综合缴情六月小说| 99久久国产综合精品swag | 国产成人久久综合二区|