首頁  >  文章  >  web前端  >  快速帶你入門Nodejs的檔案操作和stream(流)

快速帶你入門Nodejs的檔案操作和stream(流)

青灯夜游
青灯夜游轉載
2021-08-18 10:22:482329瀏覽

這篇文章跟大家介紹一下Nodejs中的檔案操作(建立和刪除目錄/檔案、重新命名、追加內容、讀取內容),以及簡單聊聊stream(串流)。

快速帶你入門Nodejs的檔案操作和stream(流)

NodeJS檔案操作

  • #NodeJS除了在網路方面大放異彩,它還可以對檔案進行操作,按邏輯上來說只要我們合理運用這些api再加上一些資料處理,我們就可以完成本地很多的操作。 【推薦學習:《nodejs 教學》】
  • 上一篇我們知道如果想引用一個模組則需要使用到require,而今天要介紹的主角是fs模組,也就是NodeJS內建的一個檔案模組,這個模組有很多的API供我們使用。

建立目錄和檔案

  • 我們可以使用fs.mkdir fs.writeFile來分別建立目錄和檔案。
  • mkdir()可以接收三個參數,第一個是路徑,第二個是個可選項代表權限,這個我們一般不需要,第三個參數是一個回呼函數,我們可以在這裡面做一些處理。
/* learnNode.js */
let fs = require('fs');
fs.mkdir('js',(err)=>{
  if(err){
    console.log('出错')
  }else{
    console.log('未出错')
  }
})
  • writeFile()可以接收四個參數,第一個是路徑,第二個是檔案內容,第三個可選項代表權限,第四個是回調函數。
/* learnNode.js */
let fs = require('fs');
fs.writeFile('./js/newJs.js','console.log("写入这个")',(err)=>{
  if(err){
    console.log('出错')
  }else{
    console.log('没出错')
  }
})

快速帶你入門Nodejs的檔案操作和stream(流)

  • 可以看到我們成功建立了目錄並寫入了一個檔案。

偵測檔案

  • 我們可以透過fs.stat來偵測一個路徑的檔案是為目錄還是文件,進而可以做一些操作。
/* learnNode.js */
let fs = require('fs');
fs.stat('./js/newJs.js', (error, stats) => {
  if(error) {
    console.log(error);
    return false;
  } else {
    console.log(`是否文件:${stats.isFile()}`); 
    console.log(`是否目录:${stats.isDirectory()}`); 
    return false;
  }
})
  • star()主要接收兩個參數第一個是要偵測的文件,第二個是一個回呼函數,這個回呼函數有兩個參數,分別是err錯誤和stats對象,這個對象提供有關文件的信息,我們可以對這個對象資訊來進行判斷。

快速帶你入門Nodejs的檔案操作和stream(流)

刪除檔案和刪除目錄

  • #既然我們可以使用NodeJS創建文件那當然我們也可以刪除文件,主要使用的是fs.unlink``fs.rmdir這兩個API
/* learnNode.js */
let fs = require('fs');
fs.unlink('./js/newJs.js', (err) => {
  if (err) throw err;
  console.log('文件已删除');
});
fs.rmdir('./js',(err)=>{
  if (err) throw err;
  console.log('目录已删除');
})
  • 這兩個API#都分別接收兩個參數是路徑和回呼函數,執行node learnNode.js可以看到我們文件已經成功刪除。

快速帶你入門Nodejs的檔案操作和stream(流)

重命名

  • #我們可以使用fs.rename來對文件重命名。
/* learnNode.js */
let fs = require('fs');
fs.rename('oldJs.js','newJs.js',(err)=>{
  if(err){
    console.log('出错')
  }else{
    console.log('未出错')
  }
})
  • rename()可以接收三個參數第一個是路徑第二個是更改的名稱,第三個是回呼函數,值得注意的是,如果第一個參數和第二個參數對應的文件所在的位置不一樣時,他不會重命名之前那個文件而是直接把文件剪切放到另一個地方。
/* learnNode.js */
let fs = require('fs');
fs.rename('newJs.js','./js/oldJs.js',(err)=>{
  if(err){
    console.log('出错')
  }else{
    console.log('剪切到js文件夹内了')
  }
})

追加內容

  • 上面我們說到建立檔案的時候可以順便寫入東西,那我們可不可以直接在檔案追加文字呢?我們可以使用fs.appendFile
/* learnNode.js */
let fs = require('fs');
fs.appendFile('newJs.txt','我是追加的内容',(err)=>{
  if(err){
    console.log('出错')
  }else{
    console.log('追加内容')
  }
})
  • appendFile()可以接收三個參數,第一個是路徑,第二個是內容,第三個是回呼函數,執行node learnNode.js即可。

快速帶你入門Nodejs的檔案操作和stream(流)

讀取檔案與讀取目錄

  • #以上都是對檔案進行增刪改的操作,我們現在還需要掌握一下讀取內容,我們可以使用fs.readFilefs.readdir分別讀取檔案和讀取目錄。
/* learnNode.js */
let fs = require('fs');
fs.readFile('newJs.txt', (err, data) => {
  if(err) {
    console.log('出错');
  } else {
    console.log("读取文件成功!");
    console.log(data);
  }
})

快速帶你入門Nodejs的檔案操作和stream(流)

/* learnNode.js */
let fs = require('fs');
fs.readdir('./', (err, data) => {
  if(err) {
    console.log('出错');
  } else {
    console.log("读取目录成功!");
    console.log(data);
  }
})

快速帶你入門Nodejs的檔案操作和stream(流)

#
  • 可以看到我们两个API都是接收两个参数,第一个是路径,第二个是回调函数,这个回调函数也有两个参数里面包含了data信息,我们可以打印这个data信息来获取内容。

stream(流)

  • 最后我们来简单聊聊stream,翻译过来就是的意思,提到流你会想到什么,河流,水流,都是从一个源头到另一个源头,就像水龙头从开关到流到地面,stream也是这样一个过程。
  • Stream 有四种流类型:
    • Readable - 可读操作。
    • Writable - 可写操作。
    • Duplex - 可读可写操作.
    • Transform - 操作被写入数据,然后读出结果。
  • 在stream的过程中,我们也有事件可以使用,比如检测到错误触发的error,有数据时触发的data
    • data - 当有数据可读时触发。
    • end - 没有更多的数据可读时触发。
    • error - 在接收和写入过程中发生错误时触发。
    • finish - 所有数据已被写入到底层系统时触发。
  • 接下来简单举个例子理解一下吧。

读取流

var fs = require("fs");
var data = '';
// 创建可读流
var readerStream = fs.createReadStream('newJs.txt');
// 设置编码为 utf8。
readerStream.setEncoding('UTF8');
// 处理流事件 遇到有数据时执行这个
readerStream.on('data', function(chunk) {
  data += chunk;
  console.log(chunk,'流遇到数据了')
});
// 处理流事件 流结束时执行这个
readerStream.on('end',function(){
  console.log(data,'流结束了');
});
 // 处理流事件 流报错时执行这个
readerStream.on('error', function(err){
  console.log(err.stack);
});
console.log("程序执行完毕");
  • 我们一开始可以创建一个可读流fs.createReadStream(),参数是你要读的文件路径。
  • 当遇到了数据时会执行readerStream.on('data',callback()),如下图所示。
  • 当流结束时会执行readerStream.on('end',callback()),如下图所示。

快速帶你入門Nodejs的檔案操作和stream(流)

写入流

  • 我们上面演示了如何通过流读取一个文件,接下来我们试试通过流写入文件。
var fs = require("fs");
var data = '我是小卢,我再写入流';
// 创建一个可以写入的流,写入到文件 newJs.txt 中
var writerStream = fs.createWriteStream('newJs.txt');
// 使用 utf8 编码写入数据
writerStream.write(data,'UTF8');
// 标记文件末尾
writerStream.end();
// 处理流事件 完成和报错时执行
writerStream.on('finish', function() {
    console.log("写入完毕");
});
writerStream.on('error', function(err){
   console.log(err.stack);
});
console.log("程序执行完毕");
  • 我们首先创建一个流,然后将data数据写入newJs.txt文件中。
  • 当流写入完毕时会执行readerStream.on('finish',callback()),如下图所示。

快速帶你入門Nodejs的檔案操作和stream(流)

  • 可以看到该newJs.txt文件中已经存在了我们写入的数据。

快速帶你入門Nodejs的檔案操作和stream(流)

写在最后

总的来说NodeJS提供了fs文件操作模块,这个模块有很多的API,上面只是简单的展示了一下,还有很多有趣的API大家只需要用到的时候去官网查就好了,因为NodeJS能操作文件,小至文件查找,大至代码编译。换个角度讲,几乎也只需要一些数据处理逻辑,再加上一些文件操作,就能够编写出大多数前端工具。

原文地址:https://juejin.cn/post/6997204352683212831

作者:快跑啊小卢_

更多编程相关知识,请访问:编程视频!!

以上是快速帶你入門Nodejs的檔案操作和stream(流)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:掘金--快跑啊小卢_。如有侵權,請聯絡admin@php.cn刪除