Node.js中常規(guī)的文件操作總結(jié)
前言
Node.js 提供一組類(lèi)似 UNIX(POSIX)標(biāo)準(zhǔn)的文件操作API。 Node 導(dǎo)入文件系統(tǒng)模塊(fs)語(yǔ)法如下所示:
var fs = require("fs")
fs模塊是文件操作的封裝,它提供了文件的讀取、寫(xiě)入、更名、刪除、遍歷目錄、鏈接等POSIX文件系統(tǒng)操作。與其他模塊不同的是,fs模塊中所有的操作都提供了異步和同步的兩個(gè)版本,例如讀取文件內(nèi)容的函數(shù)有異步的fs.readFile()
和同步的fs.readFileSync()
。
一. 目錄操作
1. 創(chuàng)建目錄
創(chuàng)建目錄的語(yǔ)法如下:
fs.mkdir(path[, mode], callback) // 異步方法 fs.mkdirSync(path[, mode]) // 同步方法
示例:
var fs = require("fs"); // 在該文件的同一目錄下建立test目錄 fs.mkdir('test',function(err){ if (err) { return console.error(err); } console.log("目錄創(chuàng)建成功。"); });
2. 讀取目錄
讀取目錄的語(yǔ)法如下:
fs.readdir(path, callback) fs.readdirSync(path)
1、path: 文件路徑;
2、callback: 回調(diào)函數(shù),回調(diào)函數(shù)帶有兩個(gè)參數(shù)err, files。err為錯(cuò)誤信息,files為目錄下的文件數(shù)組列表。
示例:
var fs = require("fs"); fs.readdir("test/",function(err, files){ if (err) { return console.log(err); } files.forEach( function (file){ console.log( file ); }); });
3. 刪除目錄
刪除目錄的語(yǔ)法如下:
fs.rmdir(path, callback) fs.rmdirSync(path)
示例:
var fs = require("fs"); fs.rmdir("test/ewe",function(err){ if (err) { return console.log(err); } fs.readdir("/test/",function(err, files){ if (err) { return console.error(err); } files.forEach( function (file){ console.log( file ); }); }); });
二. 文件操作
1. 打開(kāi)文件
打開(kāi)文件的語(yǔ)法如下:
fs.open(path, flags, [mode], [callback(err, fd)])
其中,path為文件的路徑,flags指文件的讀取方式,mode參數(shù)用于創(chuàng)建文件時(shí)給文件指定權(quán)限,默認(rèn)是0666.回掉函數(shù)將會(huì)傳遞一個(gè)文件描述符fd。
flags的常用參數(shù)值如下:
mode參數(shù)表示的文件權(quán)限是POSIX操作系統(tǒng)中對(duì)文件讀取和訪問(wèn)權(quán)限的規(guī)范,通常用一個(gè)八進(jìn)制數(shù)來(lái)表示。例如0754表示文件所有者的權(quán)限是7(讀、寫(xiě)、執(zhí)行),同組的用戶權(quán)限是5(讀、執(zhí)行),其他用戶的權(quán)限是4(讀)。
示例:
var fs = require('fs'); fs.open("test.txt","w",0644,function(e,fd){ try{ fs.write(fd,"first fs!",0,'utf8',function(e){ fs.closeSync(fd); }) } catch(E) { throw e; } });
2. 寫(xiě)入文件
寫(xiě)入文件的語(yǔ)法如下:
fs.writeFile(file, data[, options], callback) fs.writeFileSync(file, data[, options])
示例:
var fs = require("fs"); fs.writeFile('test.txt', 'hello world!', function(err) { if (err) { return console.log(err); } fs.readFile('test.txt', function (err, data) { if (err) { return console.log(err); } console.log("異步讀取文件數(shù)據(jù): " + data.toString()); }); });
3. 讀取文件
讀取文件的語(yǔ)法如下:
fs.read(fd, buffer, offset, length, position, callback) fs.readSync(fd, buffer, offset, length, position) fs.readFile(file[, options], callback) fs.readFileSync(file[, options])
其中,fs.read()
和fs.readSync()
的參數(shù)如下:
fd – 通過(guò) fs.open() 方法返回的文件描述符;
buffer – 數(shù)據(jù)寫(xiě)入的緩沖區(qū);
offset – 緩沖區(qū)寫(xiě)入的寫(xiě)入偏移量;
length – 要從文件中讀取的字節(jié)數(shù);
position – 文件讀取的起始位置,如果 position 的值為 null,則會(huì)從當(dāng)前文件指針的位置讀取;
callback – 回調(diào)函數(shù),有三個(gè)參數(shù)err, bytesRead, buffer,err 為錯(cuò)誤信息, bytesRead 表示讀取的字節(jié)數(shù),buffer 為緩沖區(qū)對(duì)象;
fs.read()
的示例如下:
var fs = require('fs'); fs.open('test.txt', 'r', function(err, fd) { if (err) { console.error(err); return; } var buf = new Buffer(8); fs.read(fd, buf, 0, 8, null, function(err, bytesRead, buffer) { if (err) { console.error(err); return; } console.log('bytesRead: ' + bytesRead); console.log(buffer); }) });
fs.readFile()
的示例如下:
var fs = require('fs'); fs.readFile('test.txt', function(err, data) { if (err) { console.log(err); } else { console.log(data.toString()); } });
4. 關(guān)閉文件
關(guān)閉文件的語(yǔ)法如下:
fs.close(fd, callback) fs.closeSync(fd)
5. 刪除文件
刪除文件的語(yǔ)法如下:
fs.unlink(path, callback) fs.unlinkSync(path)
示例:
var fs = require("fs"); fs.unlink('test.txt', function(err) { if (err) { return console.log(err); } console.log("文件刪除成功!"); });
6. 確定文件是否存在
確定文件是否存在的語(yǔ)法如下:
fs.exists(path, callback) fs.existsSync(path)
示例:
var fs = require('fs'); fs.exists('test.txt', function (exists) { if(exists) { console.log("文件存在!"); }else { console.log("文件不存在!"); } });
7. 追加內(nèi)容至文件
fs.appendFile(file, data[, options], callback) fs.appendFileSync(file, data[, options])
示例:
var fs = require('fs'); fs.appendFile("test.txt", "append content", function (err) { if (err) { console.log(err); }else { fs.readFile('test.txt', function(err, data) { if (err) { console.log(err); } else { console.log(data.toString()); } }); } });
總結(jié)
更多的文件系統(tǒng)操作可查看Node.js的fs模塊的官方API文檔,以上就是關(guān)于Node.js中文件常規(guī)操作的全部?jī)?nèi)容,希望這篇文章對(duì)大家學(xué)習(xí)或者使用Node.js能有所幫助,如果有疑問(wèn)大家可以留言交流。
相關(guān)文章
從零開(kāi)始學(xué)習(xí)Node.js系列教程之SQLite3和MongoDB用法分析
這篇文章主要介紹了Node.js SQLite3和MongoDB用法,結(jié)合實(shí)例形式分析了SQLite3和MongoDB數(shù)據(jù)庫(kù)的初始化、連接、查詢等操作的實(shí)現(xiàn)技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-04-04Node.js和MongoDB實(shí)現(xiàn)簡(jiǎn)單日志分析系統(tǒng)
這篇文章主要介紹了Node.js和MongoDB實(shí)現(xiàn)簡(jiǎn)單日志分析系統(tǒng),本文給出了服務(wù)器端、客戶端、圖表生成、Shell自動(dòng)執(zhí)行等功能的實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-04-04nodejs 提示‘xxx’ 不是內(nèi)部或外部命令解決方法
本文介紹了node.js包管理工具npm安裝模塊后,無(wú)法通過(guò)命令行執(zhí)行命令,提示‘xxx’ 不是內(nèi)部或外部命令的解決方法,給需要的小伙伴參考下。2014-11-11Node.js fs模塊(文件模塊)創(chuàng)建、刪除目錄(文件)讀取寫(xiě)入文件流的方法
這篇文章主要介紹了Node.js fs模塊(文件模塊)創(chuàng)建、刪除目錄(文件)讀取寫(xiě)入文件流的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09詳解Node中導(dǎo)入模塊require和import的區(qū)別
本篇文章主要介紹了詳解Node中導(dǎo)入模塊require和import的區(qū)別,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-08-08node+express+axios實(shí)現(xiàn)單文件上傳功能
這篇文章主要為大家詳細(xì)介紹了node+express+axios實(shí)現(xiàn)單文件上傳功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08Node.js對(duì)MongoDB數(shù)據(jù)庫(kù)實(shí)現(xiàn)模糊查詢的方法
模糊查詢是數(shù)據(jù)庫(kù)的基本操作之一,下面這篇文章主要給大家介紹了利用Node.js對(duì)MongoDB數(shù)據(jù)庫(kù)實(shí)現(xiàn)模糊查詢的方法教程,文中給出了詳細(xì)的介紹和示例代碼,對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-05-05