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

Node.js中文件系統(tǒng)fs模塊的使用及常用接口

 更新時間:2020年03月06日 09:28:47   作者:七年就是一輩子  
fs是filesystem的縮寫,該模塊提供本地文件的讀寫能力,基本上是POSIX文件操作命令的簡單包裝。這篇文章主要介紹了Node.js中的文件系統(tǒng)fs模塊的使用,需要的朋友可以參考下

fs是filesystem的縮寫,該模塊提供本地文件的讀寫能力,基本上是POSIX文件操作命令的簡單包裝。但是,這個模塊幾乎對所有操作提供異步和同步兩種操作方式,供開發(fā)者選擇。

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

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

1.常用API快速復習

fs.stat 檢測是文件還是目錄

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

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

如下代碼在當前目錄生成多層級文件夾

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.實戰(zhàn)舉例

實戰(zhàn)1

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

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

實戰(zhàn)2

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

使用同步方法方式

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.管道流

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

const fs = require("fs")
//創(chuàng)建一個可讀流
const readerStream = fs.createReadStream('input.txt')
//創(chuàng)建一個可寫流
const writerStream = fs.createWriteStream('output.txt')
//管道讀寫操作
//讀取input.txt文件內容,并將內容寫入到output.txt文件中
readerStream.pipe(writerStream)
console.log("程序執(zhí)行完畢")
fs.createReadStream 從文件流中讀取數據
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('---結束---')
 console.log(count + ',' + star)
})
fileReadStream.on('error', error => {
 console.log(error)
})
fs.createWriteStream 寫入文件
const fs = require("fs")
const data ='我是從數據庫獲取的數據,我要保存起來'
//創(chuàng)建一個可以寫入的流,寫入到文件output.txt中
const writerStream = fs.createWriteStream('output.txt')
//使用utf8編碼寫入數據
writerStream.write(data,'UTF8')
//標記文件末尾
writerStream.end()
//處理流事件-->finish事件
writerStream.on('finish', () => {
 /*finish-所有數據已被寫入到底層系統(tǒng)時觸發(fā)。*/
 console.log("寫入完成。")
})
writerStream.on('error', err => {
 console.log(err.stack);
})
console.log("程序執(zhí)行完畢")

實戰(zhàn):復制圖片在項目根目錄有一張圖片 2020.png ,把它復制到 /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 要寫入的目錄一定要帶上要復制的文件名,也就是不能寫成 fs.createWriteStream('./wwwroot/images/') 否則在 macOS 下會報如下錯誤:

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

本文源碼: https://github.com/dunizb/CodeTest/tree/master/Node/fs

總結

到此這篇關于Node.js中fs模塊的使用及常用接口的文章就介紹到這了,更多相關node.js fs 模塊內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Nodejs-cluster模塊知識點總結及實例用法

    Nodejs-cluster模塊知識點總結及實例用法

    在本篇文章里小編給大家整理的是一篇關于Nodejs-cluster模塊知識點總結及實例用法,有興趣的朋友們可以跟著學習下。
    2021-12-12
  • node.js中的console.assert方法使用說明

    node.js中的console.assert方法使用說明

    這篇文章主要介紹了node.js中的console.assert方法使用說明,本文介紹了console.assert的方法說明、語法、接收參數、使用實例和實現源碼,需要的朋友可以參考下
    2014-12-12
  • node-sass是干什么用的

    node-sass是干什么用的

    node-sass是一個項目依賴,在一個項目中在使用sass語法的時候,必須通過sass-loader來解析sass,從而使sass語法變成瀏覽器能夠識別的CSS語法,下面介紹node-sass是什么,一起看看吧
    2023-08-08
  • nodejs安裝與配置過程+初學實例解讀

    nodejs安裝與配置過程+初學實例解讀

    這篇文章主要介紹了nodejs安裝與配置過程+初學實例解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • node.js中的forEach()是同步還是異步呢

    node.js中的forEach()是同步還是異步呢

    這篇文章主要討論并驗證了node.js中的forEach()是同步還是異步,思路和方法分享給大家,有需要的小伙伴可以參考下。
    2015-01-01
  • node app 打包工具pkg的具體使用

    node app 打包工具pkg的具體使用

    這篇文章主要介紹了node app 打包工具pkg的具體使用,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • nodejs搭建本地http服務器教程

    nodejs搭建本地http服務器教程

    本篇文章主要介紹了nodejs搭建本地http服務器教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • Node中文件斷點續(xù)傳原理和方法總結

    Node中文件斷點續(xù)傳原理和方法總結

    在之前做過一個小項目,涉及到了文件上傳,在大文件上面使用了斷點續(xù)傳,降低了服務器方面的壓力,現在小編把Node中文件斷點續(xù)傳原理和方法總結分享給大家,感興趣的朋友一起看看吧
    2022-01-01
  • 如何寫Node.JS版本小游戲

    如何寫Node.JS版本小游戲

    JavaScript的出現催動了前端開發(fā)的萌芽,前后端分離促進了Vue、React等開發(fā)框架的發(fā)展,Weex、React-Native等的演變賦予了并存多端開發(fā)的能力,而Node.JS的面世無疑是推動了Web全棧開發(fā)的步伐。
    2021-05-05
  • Node?Js開發(fā)環(huán)境的搭建全過程記錄

    Node?Js開發(fā)環(huán)境的搭建全過程記錄

    這篇文章詳細介紹了腳手架工具在軟件開發(fā)中的作用,包括常見的腳手架工具、腳手架的基本能力、搭建腳手架的方法、commander命令參數處理工具的使用、模塊化拆分、下載遠程倉庫代碼等,需要的朋友可以參考下
    2024-11-11

最新評論

玉树县| 海安县| 高碑店市| 彭州市| 延安市| 筠连县| 宁安市| 宁陕县| 洛南县| 公主岭市| 泗洪县| 花莲县| 区。| 长阳| 淳化县| 百色市| 车险| 洞头县| 拜城县| 浦北县| 苏尼特右旗| 佛坪县| 天门市| 赤壁市| 济阳县| 汾西县| 阳江市| 青岛市| 修武县| 泾阳县| 阿克苏市| 叙永县| 呼玛县| 绿春县| 安吉县| 吉安县| 班玛县| 江孜县| 本溪市| 鹿泉市| 远安县|