fs文件系統(tǒng)
在Node.js中,提供一個fs模塊,以實現(xiàn)文件及目錄的讀寫操作。1. 同步和異步方法
一般來講,讀取文件使用異步的方法,但是在讀取例如系統(tǒng)配置文件時,應(yīng)該使用同步的方法2. 普通文件寫入和讀取 2.1 文件寫入 2.1.1 寫入一個基本的文本文件
如果不存在要寫入的文件,那么將會自動創(chuàng)建一個文件
const fs = require("fs"); let writeData = "The engaged couple will appear for a photo outside Kensington Palace on Monday afternoon, and will take part in a broadcast interview in the evening."; fs.writeFile("./writeFile.txt", writeData, "utf-8", function (err) { if (err) { console.log("there are some wrong happened~"); } else { console.log("Write successfully~~"); } });2.1.2 復(fù)制圖片及各種二進(jìn)制文件(以圖片文件為例)
當(dāng)前文件夾下有一個fileImage.jpg的圖片文件
const fs = require("fs"); fs.readFile("./fileImage.jpg", "base64", function (err, data) { if (err) { console.log("讀取圖片失敗,請檢查錯誤"); } else { fs.writeFile("./fileImageCopy.jpg", data, "base64", function (err) { if (err) { console.log("復(fù)制圖片文件失敗"); } else { console.log("復(fù)制圖片文件成功"); } }); } });2.2 文件讀取 2.2.1 文件異步讀取
當(dāng)前目錄下有一個readFile.txt文件,文件的內(nèi)容是hello, this is a read file txt.
const fs = require("fs"); fs.readFile("./readFile.txt", "utf-8", function(err, data){ if (err) { console.log("read file wrong", err); } else { console.log("dataAsync"); console.log(data); } }); /** * dataAsync * hello, this is a read file txt. * **/2.2.2 文件同步讀取
const fs = require("fs"); let dataSync = fs.readFileSync("./readFile.txt", "utf-8"); console.log("dataSync"); console.log(dataSync); /** * dataSync * hello, this is a read file txt. * **/3. 追加數(shù)據(jù) 3.1 對文本文件同步追加數(shù)據(jù)
const fs = require("fs"); const appendFileContent = "this is appendFileContent box"; fs.appendFileSync("./appendFile.txt", appendFileContent, "utf-8");3.2 對文本文件異步追加數(shù)據(jù)
appendFile.txt原本內(nèi)容
hello, this a basic append txt file. -
const fs = require("fs"); const appendFileContent = "this is appendFileContent box"; fs.appendFile("./appendFile.txt", appendFileContent, "utf-8", function (err) { if (err) { console.log("追加文件操作失敗"); } else { fs.readFile("./appendFile.txt", "utf-8", function (err, data) { if (err) { console.log("追加成功,但是讀取失敗"); } else { console.log("追加成功,讀取操作成功"); console.log(data); } }); } }); /** * 追加成功,讀取操作成功 * hello, this a basic append txt file. * * -this is appendFileContent box * **/4. 文件的打開和關(guān)閉
fd代表打開文件時返回的文件描述符,在windows操作系統(tǒng)中,文件描述符也稱為文件句柄。4.1 異步打開文件
const fs = require("fs"); fs.open("./openFile.txt", "r", (err, fd) => { if (err) { console.log("open file wrong", err); } else { console.log("open"); console.log(fd); } }); /** * open * 3 * **/4.2 同步打開文件
const fs = require("fs"); let openSync = fs.openSync("./openFile.txt", "r"); console.log("openSync"); console.log(fd); fs.clodeSync(fd); // 同步關(guān)閉文件 /** * openSync * 3 * **/5. fs的fs.write和fs.read
在使用write方法或者writeSync方法在文件中寫入數(shù)據(jù)時
操作系統(tǒng)的做法是首先將該部分?jǐn)?shù)據(jù)讀取到內(nèi)存中,再把數(shù)據(jù)寫到文件中
當(dāng)數(shù)據(jù)讀取完畢時不代表數(shù)據(jù)已經(jīng)寫完,因為還有一步部分可能會留在內(nèi)存緩沖區(qū)中.
這時候如果調(diào)用close或者closeSync方法關(guān)閉文件,那么這部分?jǐn)?shù)據(jù)就會丟失,
這時候就可以采用fs模塊中的fsync方法對文件進(jìn)行同步操作,即將內(nèi)存緩沖區(qū)中的剩余數(shù)據(jù)全部寫入文件.
5.1 文件寫入當(dāng)前目錄下有一個write.txt文件,文件的內(nèi)容是我喜歡編程
5.1.1 異步寫入更加底層的一種寫入方法,可以從指定位置寫入數(shù)據(jù)
用fs.write寫入,需要先打開文件,根據(jù)文件資源句柄,寫入內(nèi)容
fs.write(fd, buffer, offset, length, position, callback(err, written, buffer))
const fs = require("fs"); let buf = new Buffer("我喜歡編程"); fs.open("./write.txt", "w", function (err, fd) { if (err) { console.log("open file wrong", err); } else { fs.write(fd, buf, 3, 9, 0, function (err, written, buffer) { if (err) { console.log("寫文件操作失敗"); } else { console.log("寫文件操作成功"); console.log(buffer.toString()); } }); } }); /** * 寫文件操作成功 * 我喜歡編程 * **/5.1.2 同步寫入
fs.writeSync(fd, buffer, offset, length, position)
const fs = require("fs"); let buf = new Buffer("我喜歡編程"); fs.open("./write.txt", "w", function (err, fd) { if (err) { console.log("open file wrong", err); } else { fs.writeSync(fd, buf, 3, 9, 0); } });5.2 文件讀取
當(dāng)前目錄下有一個open.txt文件,文件的內(nèi)容是我喜歡編程
5.2.1 同步讀取fs.readSync(fd, buffer, offset, length, position, callback)
const fs = require("fs"); fs.open("./open.txt", "r", function(err, fd){ var buf = new Buffer(255).fill(0); var bytesRead = fs.readSync(fd, buf, 0, 9, 3); console.log(bytesRead);//9 console.log(buf.slice(0, bytesRead).toString());//喜歡編 });5.2.2 異步讀取
fs.read(fd, buffer, offset, length, position, callback(err,bytesRead, buffer))
const fs = require("fs"); fs.open("./open.txt", "r", function (err, fd) { let buf = new Buffer(255).fill(0);//緩存區(qū) fs.read(fd, buf, 0, 9, 3, function (err, bytesRead, buffer) { console.log(buffer.slice(0, bytesRead).toString());//喜歡編 }); }); fs.open("./open.txt", "r", function (err, fd) { let buf = new Buffer(255).fill(0);//緩存區(qū) fs.read(fd, buf, 0, 9, 3, function (err, bytesRead, buffer) { console.log(buffer.slice(0, bytesRead).toString());//喜歡編 fs.read(fd, buf, 0, 3, null, function (err, bytesRead, buffer) { console.log(buffer.slice(0, bytesRead).toString());//程 }); }); });
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/107593.html
摘要:中各種用于讀取數(shù)據(jù)的對象對象描述用于讀取文件代表客戶端請求或服務(wù)器端響應(yīng)代表一個端口對象用于創(chuàng)建子進(jìn)程的標(biāo)準(zhǔn)輸出流。如果子進(jìn)程和父進(jìn)程共享輸入輸出流,則子進(jìn)程的標(biāo)準(zhǔn)輸出流被廢棄用于創(chuàng)建子進(jìn)程的標(biāo)準(zhǔn)錯誤輸出流。 9. stream流 fs模塊中集中文件讀寫方法的區(qū)別 用途 使用異步方式 使用同步方式 將文件完整讀入緩存區(qū) readFile readFileSync 將文件部...
6. 目錄操作 6.1 創(chuàng)建目錄 如果存在該目錄,就創(chuàng)建失敗 同步創(chuàng)建目錄fs.mkdirSync(path, [mode]) const fs = require(fs); let mkdir = ./mkdir; fs.mkdir(mkdir, (err) => { if (err) { console.log(`mkdir ${mkdir} file faile...
摘要:在中,只支持單線程。在這種場合下,如果能夠使用多進(jìn)程,則可以為每個請求分配一個進(jìn)程,從而可以更好地使用服務(wù)器端的資源。進(jìn)程進(jìn)程對象的屬性用于運行應(yīng)用程序的可執(zhí)行文件的絕對路徑的版本號及其各依賴的版本號當(dāng)前運行的平臺用于讀入標(biāo)準(zhǔn)輸入流的對象。 Process 在Node.js中,只支持單線程。但是在應(yīng)用程序中,如果只使用單線程進(jìn)行操作,從接收請求開始到返回響應(yīng)為止的這段時間內(nèi)可能存在很長...
摘要:如果打開一個文件的符號鏈接文件進(jìn)行編輯,操作系統(tǒng)將自動打開符號鏈接中所指向的原文件進(jìn)行編輯,如果打開一個目錄的符號鏈接文件進(jìn)行文件的操作編輯或刪除操作,則操作系統(tǒng)將西東打開符號鏈接中所指向的原目錄并執(zhí)行相應(yīng)的操作。 8. 對文件或目錄執(zhí)行的其他操作 8.1 修改文件名字或移動文件目錄fs.rename fs.rename(oldPath, newPath, callback(err...
閱讀 1310·2021-11-22 14:44
閱讀 2445·2021-09-30 09:47
閱讀 1221·2021-09-09 11:56
閱讀 2077·2021-09-08 09:45
閱讀 3953·2021-08-31 09:40
閱讀 1250·2019-08-30 15:52
閱讀 2044·2019-08-30 14:09
閱讀 1578·2019-08-26 17:04