日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

初学Node(五)文件I/O

發布時間:2025/5/22 编程问答 82 豆豆
生活随笔 收集整理的這篇文章主要介紹了 初学Node(五)文件I/O 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文件讀寫

  Node的出現的一個亮點就是讓JS也有了讀寫文件的能力,而且實現起來要比其他語言更簡單,對文件的一些操作我們都可通過fs模塊來完成。fs即fileSystem的縮寫,fs模塊可以完成對文件的所有操作。

  可以通過fs.readFileSync來同步的讀取文件:

var fs = require("fs"); var data = fs.readFileSync("content.txt"); console.log(data.toString());

  fs已經幫我們實現了一個讀取文件的API,我們不用再像其他語言一樣還要實例化IO對象,直接引入fs模塊,調用readFileSync這個函數即可。

  對文件的讀取也可以通過fs.readFile(path,callback)來完成,這是一個異步的讀取文件API,所以參數除了要讀取的文件意外還需要一個讀取完成的回調函數,相比同步讀取,異步讀取更加高效和實用:

var fs = require("fs"); fs.readFile("content.txt",function(err,data){if(err){return console.log(err.stack);}console.log("--文件讀取成功--");console.log(data.toString()); });

  可以通過fs.writeFile來實現將內容寫入到一個文件,如果文件已經錯在就會改變里面的內容,如果不存在就創建然后在寫入內容:

var fs = require("fs"); var data = "我是通過JS寫入到文件的內容"; fs.writeFile("JSContent.txt",data,function(err){if(err){return console.log(err.stack);}console.log("文件寫入完畢"); });

  一個小demo測試讀寫文件的使用:

  ?新建一個file文件夾,在里面新建新建一個template.html、head.txt、body.txt、foot.txt、demo.js:

  template.html內容如下:

<body>{{head.txt}}{{body.txt}}{{foot.txt}}</body>

  head.txt如下:

<h1>我是頭部</h1>

  body.txt如下:

<div>我是主體</div>

  foot.txt如下:

<footer>我是尾部</footer>

  demo.js如下:

var fs = require("fs"); fs.readFile("template.html",function(err,data){if(err){return console.log("讀取文件錯誤");}var result = data.toString().replace(/{{\w*.\w*}}/g,function(one){return fs.readFileSync(one.substring(2,one.length-2));});fs.writeFile("result.html",result,function(err){if(err){return console.log("生成文件錯誤");}console.log("生成文件成功");}); });

  我們在命令行中執行node.js就會生成一個正常的result.html文件了。

以流的方式來讀寫文件

  利用流來讀取文件:

var fs = require("fs"); var readStream = fs.createReadStream("content.txt"); readStream.setEncoding("UTF8"); readStream.on("data",function(data){console.log(data); }); readStream.on("end",function(){console.log("文件讀取完畢"); }); readStream.on("error",function(err){console.log("讀取文件錯誤:"+err.stack); });

  首先利用fs模塊創建一個文件的讀取流,然后設置讀取內體的字符設置,讀取流有三個事件分別為data,end,error,data即讀取文件內容的時候,end即內容讀取完畢時,error即讀取文件發生錯誤時,我們可以為每一個事件定義對應的事件處理函數來完成我們的操作。

  利用流來將內容寫入文件:

var fs =require("fs"); var writeStream = fs.createWriteStream("content.txt"); writeStream.write("我是通過寫入流寫入的內容","UTF8"); writeStream.end(); writeStream.on("finish",function(){console.log("文件寫入成功"); }); writeStream.on("error",function(err){console.log("寫入文件時發生錯誤:"+err.stack); });

  使用方式和讀取流基本一致,不過事件換成了finish事件,表示文件寫入成功時的事件,這個事件只有在調用end()函數之后才能被觸發,end()表示內容已經寫入完畢了。

  當我們在實現一個復制文件的功能時,如果原始文件過大這個操作就會很耗時,此時我們就要利用管道流來優化這個過程,管道流在復制文件時并不會在將第一個文件的內容讀取完畢后再寫入目標文件,而是每讀取一段內容就將這段內容寫入到文件,然后在讀在些一直到文件復制完畢:

var fs =require("fs"); var readStream = fs.createReadStream("content.txt"); var writeStream = fs.createWriteStream("result.txt"); readStream.pipe(writeStream); console.log("復制完成");

  pipe函數就是我們所說的管道,我們可以把它看做是連接讀取流和寫入流的橋梁。

?

轉載于:https://www.cnblogs.com/shinhwazt/p/6067745.html

總結

以上是生活随笔為你收集整理的初学Node(五)文件I/O的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。