摘要:參數(shù)說明文件描述符,必須接收方法中的回調(diào)函數(shù)返回的第二個參數(shù)。引入模塊打開文件讀取文件打印出中存入的數(shù)據(jù)關(guān)閉文件運行結(jié)果如下五目錄操作創(chuàng)建目錄使用創(chuàng)建目錄,是需要創(chuàng)建的目錄,是目錄的權(quán)限默認是,是回調(diào)函數(shù)。
一、同步和異步
使用require("fs")載入fs模塊,模塊中所有方法都有同步和異步兩種形式。
異步方法中回調(diào)函數(shù)的第一個參數(shù)總是留給異常參數(shù)(exception),如果方法成功完成,該參數(shù)為null或undefined。
異步寫法demo:有一個回調(diào)函數(shù)。
var fs = require("fs"); // 載入fs模塊 fs.unlink("/tmp/shiyanlou", function(err) { if (err) { throw err; } console.log("成功刪除了 /tmp/shiyanlou"); });
同步寫法demo:
var fs = require("fs"); fs.unlinkSync("/tmp/shiyanlou"); // Sync 表示是同步方法 console.log("成功刪除了 /tmp/shiyanlou");
同步方法執(zhí)行完并返回結(jié)果后,才能執(zhí)行后續(xù)的代碼。而異步方法采用回調(diào)函數(shù)接收返回結(jié)果,可以立即執(zhí)行后續(xù)代碼。
二、readFile讀取文件
fs.readFile(filename,[option],callback) 方法讀取文件。
參數(shù)說明:
filename String 文件名
option Object
- encoding String |null default=null - flag String default="r"
callback Function
demo
有一個文本文件text.txt內(nèi)容如下
line one line two
和text.txt相同目錄中有一個readfile.js,內(nèi)容如下
readFile的回調(diào)函數(shù)接收兩個參數(shù),err是讀取文件出錯時觸發(fā)的錯誤對象,data是從文件讀取的數(shù)據(jù)。
var fs = require("fs"); // 引入fs模塊 fs.readFile("./test.txt", function(err, data) { // 讀取文件失敗/錯誤 if (err) { throw err; } // 讀取文件成功 console.log(data); });
$ node readfile.js運行結(jié)果
// 使用toString() fs.readFile("./test.txt", function(err, data) { // 讀取文件失敗/錯誤 if (err) { throw err; } // 讀取文件成功 console.log(data.toString()); });
設(shè)置utf-8編碼寫法:
// 設(shè)置編碼格式 fs.readFile("./test.txt", "utf-8", function(err, data) { // 讀取文件失敗/錯誤 if (err) { throw err; } // 讀取文件成功 console.log("utf-8: ", data.toString()); //直接用console.log(data);也可以 });
readFile同步的寫法就是沒有回調(diào)函數(shù):fs.readFileSync(filename,[options])。
三、WriteFile寫入文件
使用fs.writeFile(filename,data,[options],callback)寫入內(nèi)容到文件。
參數(shù)說明:
filename String 文件名
data String|buffer
option Object
- encoding String |nulldefault="utf-8" - mode Number default=438(aka 0666 in Octal) - flag Stringdefault="w"
callback Function
demo
var fs = require("fs"); // 引入fs模塊 // 寫入文件內(nèi)容(如果文件不存在會創(chuàng)建一個文件) // 寫入時會先清空文件 fs.writeFile("./test2.txt", "test test", function(err) { if (err) { throw err; } console.log("Saved."); // 寫入成功后讀取測試 fs.readFile("./test2.txt", "utf-8", function(err, data) { if (err) { throw err; } console.log(data); }); });
因為默認flag="w"是寫,會清空文件,想要追加,可以傳遞一個flag參數(shù),如下。
var fs = require("fs"); // 引入fs模塊 // 寫入文件內(nèi)容(如果文件不存在會創(chuàng)建一個文件) // 傳遞了追加參數(shù) { "flag": "a" } fs.writeFile("./test2.txt", "test test", { "flag": "a" }, function(err) { if (err) { throw err; } console.log("Saved."); // 寫入成功后讀取測試 fs.readFile("./test2.txt", "utf-8", function(err, data) { if (err) { throw err; } console.log(data); }); });
flag傳值,r代表讀取文件,w代表寫文件,a代表追加。
四、使用fs.read和fs.write讀寫文件
fs.read和fs.write功能類似fs.readFile和fs.writeFile(),但提供更底層的操作,實際應(yīng)用中多用fs.readFile和fs.writeFile。
使用fs.read和fs.write讀寫文件需要使用fs.open打開文件和fs.close關(guān)閉文件。
1、fs.read()
先介紹fs.open。
fs.open(path,flags,[mode],callback)方法用于打開文件,以便fs.read()讀取。
參數(shù)說明:
path 文件路徑
flags打開文件的方式
[mode] 是文件的權(quán)限(可行參數(shù),默認值是0666)
callback 回調(diào)函數(shù)
flags值及說明如下:
r :讀取文件,文件不存在時報錯; r+ :讀取并寫入文件,文件不存在時報錯; rs :以同步方式讀取文件,文件不存在時報錯; rs+ :以同步方式讀取并寫入文件,文件不存在時報錯; w :寫入文件,文件不存在則創(chuàng)建,存在則清空; wx :和w一樣,但是文件存在時會報錯; w+ :讀取并寫入文件,文件不存在則創(chuàng)建,存在則清空; wx+ :和w+一樣,但是文件存在時會報錯; a :以追加方式寫入文件,文件不存在則創(chuàng)建; ax :和a一樣,但是文件存在時會報錯; a+ :讀取并追加寫入文件,文件不存在則創(chuàng)建; ax+ :和a+一樣,但是文件存在時會報錯。
fs.close(fd,[callback])
用于關(guān)閉文件,fd是所打開文件的文件描述符。
fs.read(fd,buffer,offset,length,position,callback)接收6個參數(shù)。
參數(shù)說明:
fd 文件描述符,必須接收fs.open()方法中的回調(diào)函數(shù)返回的第二個參數(shù)。
buffer 是存放讀取到的數(shù)據(jù)的Buffer對象。
offset 指定 向buffer中存放數(shù)據(jù)的起始位置。
length 指定 讀取文件中數(shù)據(jù)的字節(jié)數(shù)。
position 指定 在文件中讀取文件內(nèi)容的起始位置。
callback 回調(diào)函數(shù),參數(shù)如下
- err 用于拋出異常 - bytesRead 從文件中讀取內(nèi)容的實際字節(jié)數(shù)。 - buffer 被讀取的緩存區(qū)對象。
demo: read.js內(nèi)容如下
var fs = require("fs"); // 引入fs模塊 // 打開文件 fs.open("./testread.txt", "r", function(err, fd) { if (err) { throw err; } console.log("open file success."); var buffer = new Buffer(255); // 讀取文件 fs.read(fd, buffer, 0, 10, 0, function(err, bytesRead, buffer) { if (err) { throw err; } // 打印出buffer中存入的數(shù)據(jù) console.log(bytesRead, buffer.slice(0, bytesRead).toString()); // 關(guān)閉文件 fs.close(fd); }); });
運行結(jié)果
2、fs.write()
fs.read(fd,buffer,offset,length[,position],callback(err,bytesWritten,buffer))接收6個參數(shù)。
參數(shù)說明:
fd 文件描述符,必須接收fs.open()方法中的回調(diào)函數(shù)返回的第二個參數(shù)。
buffer 是存放 將被寫入的數(shù)據(jù),buffer尺寸的大小設(shè)置最好是8的倍數(shù),效率較高。
offset buffer寫入的偏移量。
length (integer)指定 寫入文件中數(shù)據(jù)的字節(jié)數(shù)。
position (integer) 指定 在寫入文件內(nèi)容的起始位置。
callback 回調(diào)函數(shù),參數(shù)如下
- err 用于拋出異常 - bytesWritten從文件中讀取內(nèi)容的實際字節(jié)數(shù)。 - buffer 被讀取的緩存區(qū)對象。
var fs = require("fs"); // 引入fs模塊 // 打開文件 fs.open("./testwrite.txt", `w`, function(err, fd) { if (err) { throw err; } console.log("open file success."); var buffer = new Buffer("shiyanlou"); // 讀取文件 fs.write(fd, buffer, 0, 6, 0, function(err, bytesWritten, buffer) { if (err) { throw err; } console.log("write success."); // 打印出buffer中存入的數(shù)據(jù) console.log(bytesWritten, buffer.slice(0, bytesWritten).toString()); // 關(guān)閉文件 fs.close(fd); }); });
運行結(jié)果如下:
五、目錄操作
1、創(chuàng)建目錄
使用fs.mkdir(path,[mode],callback)創(chuàng)建目錄,path是需要創(chuàng)建的目錄,[mode]是目錄的權(quán)限(默認是0777),callback是回調(diào)函數(shù)。
demo:mkdir.js內(nèi)容如下
var fs = require("fs"); // 引入fs模塊 // 創(chuàng)建 newdir 目錄 fs.mkdir("./newdir", function(err) { if (err) { throw err; } console.log("make dir success."); });
刪除目錄可以用fs.rmdir(path,callback);但是只能刪除空目錄。
2、讀取目錄
使用fs.readdir(path,callback)讀取文件目錄。
demo:readdir.js內(nèi)容如下
var fs = require("fs"); // 引入fs模塊 fs.readdir("./newdir", function(err, files) { if (err) { throw err; } // files是一個數(shù)組 // 每個元素是此目錄下的文件或文件夾的名稱 console.log(files); });
結(jié)果輸出該目錄有哪些目錄和文件。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/90769.html
摘要:如果說用一句話來概括那就是它開啟了服務(wù)器端語言。系列的文章并不會從一開始長篇概論的講的歷史,安裝,以及其他很瑣碎的事情。只會專門介紹關(guān)于或者準(zhǔn)確來講是關(guān)于的敏捷開發(fā)。性能不對已有的特性進行二次抽象,我們只是在它之上擴展了應(yīng)用所需的基本功能。 如果說用一句話來概括Node那就是:它開啟了JavaScript服務(wù)器端語言。 Node系列的文章并不會從一開始長篇概論的講Node的歷史,安裝,...
摘要:因為進程退出之后將不再執(zhí)行事件循環(huán),所有只有那些沒有回調(diào)函數(shù)的代碼才會被執(zhí)行。此外,創(chuàng)建的回調(diào)函數(shù)具有隔離性,他們之間不會相互影響。我們來看的一個簡單例子,他創(chuàng)建了一個子進程,第一個參數(shù)是一個命令,第二個參數(shù)是回調(diào)函數(shù),處理返回結(jié)果。 雖然node對操作系統(tǒng)做了很多抽象的工作,但是你還是可以直接和他交互,比如和系統(tǒng)中已經(jīng)存在的進程進行交互,創(chuàng)建工作子進程。node是一個用于事件循環(huán)的線...
摘要:事件的監(jiān)聽與事件的觸發(fā)事件一事件機制的實現(xiàn)中大部分的模塊,都繼承自模塊。從另一個角度來看,事件偵聽器模式也是一種事件鉤子的機制,利用事件鉤子導(dǎo)出內(nèi)部數(shù)據(jù)或狀態(tài)給外部調(diào)用者。的核心就是事件發(fā)射與事件監(jiān)聽器功能的封裝。 nodejs事件的監(jiān)聽與事件的觸發(fā) nodejs事件(Events)showImg(https://segmentfault.com/img/bV0Sqi?w=692&h=...
摘要:中的模塊在中有模塊的概念,類似于語言中的頭文件,都是函數(shù)庫。靈活運用模塊可以非常便捷的操作后端操作前端。最好在運行文件的同個文件夾下下載方便使用,也可以在上級文件夾下載全局調(diào)用。他可以為文檔增刪改查。 nodeJS中的模塊 在nodeJS中有模塊的概念,類似于C語言中的頭文件,都是函數(shù)庫。靈活運用模塊可以非常便捷的操作后端操作前端。而在nodeJS中引入模塊要使用require();這...
摘要:異步文件系統(tǒng)不會阻塞程序的執(zhí)行,而是在操作完成時,通過回調(diào)函數(shù)將結(jié)果返回。 文件系統(tǒng)(File System): 在Node中,文件系統(tǒng)的交互是非常重要的,服務(wù)器的本質(zhì)就是將本地的文件發(fā)送給客戶端, Node通過fs模塊來和文件系統(tǒng)進行交互,該模塊提供了一些標(biāo)準(zhǔn)的文件訪問API類打開、讀取、寫入文件、以及與其交互。 要是用fs模塊,首先要從核心模塊中加載; 使用 const fs= ...
閱讀 1500·2021-11-17 09:33
閱讀 1267·2021-10-11 10:59
閱讀 2900·2021-09-30 09:48
閱讀 1909·2021-09-30 09:47
閱讀 3032·2019-08-30 15:55
閱讀 2343·2019-08-30 15:54
閱讀 1499·2019-08-29 15:25
閱讀 1653·2019-08-29 10:57