Node.js中常規(guī)的文件操作總結(jié)
前言
Node.js 提供一組類似 UNIX(POSIX)標(biāo)準(zhǔn)的文件操作API。 Node 導(dǎo)入文件系統(tǒng)模塊(fs)語法如下所示:
var fs = require("fs")
fs模塊是文件操作的封裝,它提供了文件的讀取、寫入、更名、刪除、遍歷目錄、鏈接等POSIX文件系統(tǒng)操作。與其他模塊不同的是,fs模塊中所有的操作都提供了異步和同步的兩個(gè)版本,例如讀取文件內(nèi)容的函數(shù)有異步的fs.readFile()和同步的fs.readFileSync() 。
一. 目錄操作
1. 創(chuàng)建目錄
創(chuàng)建目錄的語法如下:
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. 讀取目錄
讀取目錄的語法如下:
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. 刪除目錄
刪除目錄的語法如下:
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. 打開文件
打開文件的語法如下:
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ì)文件讀取和訪問權(quán)限的規(guī)范,通常用一個(gè)八進(jìn)制數(shù)來表示。例如0754表示文件所有者的權(quán)限是7(讀、寫、執(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. 寫入文件
寫入文件的語法如下:
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. 讀取文件
讀取文件的語法如下:
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 – 通過 fs.open() 方法返回的文件描述符;
buffer – 數(shù)據(jù)寫入的緩沖區(qū);
offset – 緩沖區(qū)寫入的寫入偏移量;
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)閉文件的語法如下:
fs.close(fd, callback) fs.closeSync(fd)
5. 刪除文件
刪除文件的語法如下:
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. 確定文件是否存在
確定文件是否存在的語法如下:
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能有所幫助,如果有疑問大家可以留言交流。
相關(guān)文章
Node.js 使用 gRPC從定義到實(shí)現(xiàn)過程詳解
gRPC是一個(gè)高性能、開源的遠(yuǎn)程過程調(diào)用(RPC)框架,由 Google 開發(fā),它支持多種編程語言,旨在簡(jiǎn)化和優(yōu)化分布式系統(tǒng)中的服務(wù)通信,本文給大家介紹Node.js 使用 gRPC從定義到實(shí)現(xiàn)過程,感興趣的朋友跟隨小編一起看看吧2024-07-07
node.js 核心http模塊,起一個(gè)服務(wù)器,返回一個(gè)頁面的實(shí)例
下面小編就為大家?guī)硪黄猲ode.js 核心http模塊,起一個(gè)服務(wù)器,返回一個(gè)頁面的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09
NodeJS實(shí)現(xiàn)一個(gè)聊天室功能
這篇文章主要介紹了NodeJS實(shí)現(xiàn)一個(gè)聊天室功能,本文實(shí)例截圖相結(jié)合給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-11-11
node打造微信個(gè)人號(hào)機(jī)器人的方法示例
這篇文章主要介紹了node打造微信個(gè)人號(hào)機(jī)器人的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-04-04
VsCode與Node.js知識(shí)點(diǎn)詳解
在本篇文章中小編給大家分享了關(guān)于VsCode與Node.js的相關(guān)知識(shí)點(diǎn)以及安裝等內(nèi)容,需要的朋友們可以參考下。2019-09-09
Node.js實(shí)現(xiàn)http請(qǐng)求服務(wù)與Mysql數(shù)據(jù)庫操作方法詳解
這篇文章主要介紹了Node.js實(shí)現(xiàn)http請(qǐng)求服務(wù)與Mysql數(shù)據(jù)庫操作方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-10-10
Node.js實(shí)現(xiàn)連接mysql數(shù)據(jù)庫功能示例
這篇文章主要介紹了Node.js實(shí)現(xiàn)連接mysql數(shù)據(jù)庫功能,簡(jiǎn)單分析了nodejs連接數(shù)據(jù)庫的操作步驟與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-09-09

