Node.js 提供一組類似 UNIX(POSIX)標(biāo)準(zhǔn)的文件操作API鸦列。 Node.js 文件系統(tǒng)封裝在 fs 模塊是中,它提供了文件的讀取搪花、寫入遏片、更名、刪除撮竿、遍歷目錄吮便、鏈接等POSIX 文件系統(tǒng)操作。
異步(async)和同步(sync)
Nodejs中Api一般都是異步的接口幢踏,如果調(diào)用同步的只需要在后面加上xxxSync()髓需。
Node.js 文件系統(tǒng)(fs 模塊)模塊中的方法均有異步和同步版本,例如讀取文件內(nèi)容的函數(shù)有異步的 fs.readFile() 和同步的 fs.readFileSync()房蝉。
var fs = require("fs");?//異步讀取文件fs.readFile('input.txt', function (err, data) { ? if (err) { ? ? return console.error(err); ? } ? console.log("Asynchronous read: " + data.toString());});?
// /同步讀取文件var data = fs.readFileSync('input.txt');console.log("Synchronous read: " + data.toString());?console.log("Program Ended");? ?
Node文件系統(tǒng):目錄操作
1. 判斷文件路徑是否存在: fs.exists(path, callback)
參數(shù)說(shuō)明:
path 欲檢測(cè)的文件路徑
callback 回調(diào)
?fs.exists("test",function(exists){ ? console.log(exists);})
2. 創(chuàng)建目錄 fs.mkdir/mkdirSync(path[, mode], callback)
path – 文件路徑 ;
mode – 設(shè)置目錄權(quán)限僚匆,默認(rèn)為0777 callback – 回調(diào)函數(shù)
var fs = require("fs");?fs.mkdir("test",function(error){ ? ? ? if (err) return console.error(err); ? ? ? console.log('目錄創(chuàng)建成功');})
3. 查看目錄 fs.readdir(path, callback(err, files))
path – 文件路徑。
callback – 回調(diào)函數(shù)搭幻,回調(diào)函數(shù)帶有兩個(gè)參數(shù)err, files咧擂,err 為錯(cuò)誤信息,files 為 目錄下的文件數(shù)組列表
fs.readdir("test",function(error,files){ ? console.log(files);})
返回結(jié)果: [ ‘note.txt’ ]
fs.readdir("test",function(error,files){ ? console.log(files);})
返回結(jié)果: [ ‘note.txt’ ]
4. 刪除目錄 fs.rmdir(path, callback)
參數(shù)使用說(shuō)明如下:
path – 文件路徑檀蹋。
callback – 回調(diào)函數(shù)松申,回調(diào)函數(shù)帶有兩個(gè)參數(shù)err, files,err 為錯(cuò)誤信息俯逾,files 為 目錄下的文件數(shù)組列表
fs.readdir("test",function(error,files){ ? console.log(files);})
返回結(jié)果: [ ‘note.txt’ ]
注意:只能刪除空的目錄贸桶,有文件的目錄會(huì)報(bào)錯(cuò):
[Error: ENOTEMPTY: directory not empty, rmdir ‘F:\FullStack-Cource-2017\Nodejs-Laravel-Action\03-Node模塊-FileSystem\test’]
Node文件模塊:文件操作說(shuō)明
1. 寫入文件 fs.writeFile(filename, data[, options], callback)
如果文件存在,寫入的內(nèi)容會(huì)覆蓋舊文件內(nèi)容
參數(shù)使用說(shuō)明如下:
path - 文件路徑桌肴』噬福
data - 要寫入文件的數(shù)據(jù),可以是 String(字符串) 或 Buffer(流) 對(duì)象坠七∷祝
options - 該參數(shù)是一個(gè)對(duì)象旗笔,包含 {encoding, mode, flag}。默認(rèn)編碼為 utf8, 模式為 0666 离例,flag 為 'w' callback - 回調(diào)函數(shù)换团,回調(diào)函數(shù)只包含錯(cuò)誤信息參數(shù)(err),在寫入失敗時(shí)返回宫蛆。
var fs = require("fs");?fs.writeFile("test/1.txt","hello file",function(error){ ? console.log(error);})
2. 文件讀取 fs.readFile( url , code , callback);
異步讀取文件
fs.readFile(“test/1.txt”,”utf-8″,function(error,data){?console.log(data);?})
異步讀取文件
var data =fs.readFileSync(“test/1.txt”,”utf-8″);?console.log(data);
3. 向文件中追加寫入 fs.appendFile(name,str,encode,callback);
參數(shù)說(shuō)明:
name : 文件名
str : 添加的字段
encode : 設(shè)置編碼
callback : 回調(diào)函數(shù)
栗子
fs.appendFile(“test/1.txt”,’窗前明月光艘包,疑是地上霜’,’utf8′,function(eror){
})
4. 改變文件名 : fs.rename(old文件名,新文件名耀盗,callback(傳遞一個(gè)err參數(shù)))
fs.rename(“test/1.txt”,”test/a.txt”,function(error){
})
5. 查看文件狀態(tài) fs.stat(fileaddr,callback(error,stats))
在fs模塊中想虎,可以使用 fs.stat() 方法或 fs.lstat() 方法查看一個(gè)文件或目錄的信息,如文件的大小叛拷、創(chuàng)建時(shí)間舌厨、權(quán)限等信息。這兩個(gè)方法的唯一區(qū)別是當(dāng)查看符號(hào)鏈接文件的信息時(shí)忿薇,必須使用 fs.lstat() 方法裙椭。
var fs = require(“fs”);
?var path = require(“path”);
var fileaddr = path.resolve(__dirname,"file/note.txt");
/** * fileaddr: 需要查看狀態(tài)的相對(duì),或者絕對(duì)地址 * callback(error,stats): error:返回的錯(cuò)誤信息 * ? ? ? ? ? ? ? ? ? ? ? stats:返回的成功信息 */fs.stat(fileaddr,function(error,stats){ ? if(error){ ? ? ? console.log(error) ? }else{ ? ? ? console.log(stats); ? ? ? console.log(stats.isFile()); ? ? ? console.log(stats.isDirectory()); ? ? ? console.log(stats.isCharacterDevice()); ? ? ? console.log(stats.isSymbolicLink()); ? ? ? console.log(stats.isFIFO()); ? ? ? console.log(stats.isSocket()); ? ? ? console.log(stats.isBlockDevice()); ? }})
fs.Stats對(duì)象的方法如下:
stats.isFile() : 判斷被查看對(duì)象是否是一個(gè)文件署浩。如果是標(biāo)準(zhǔn)文件揉燃,返回true。是目錄筋栋、套接字炊汤、符號(hào)連接、或設(shè)備等返回false弊攘。
stats. isDirectory() : 判斷被查看對(duì)象是否是一個(gè)目錄抢腐。如果是目錄,返回true襟交。
stats. isBlockDevice() : 判斷被查看對(duì)象是否是一個(gè)塊設(shè)備文件迈倍。 如果是塊設(shè)備,返回true捣域,大多數(shù)情況下類UNIX系統(tǒng)的塊設(shè)備都位于/dev目錄下授瘦。
stats. isCharacterDevice() : 判斷被查看對(duì)象是否是一個(gè)字符設(shè)備文件。如果是字符設(shè)備竟宋,返回true。
stats. isSymbolicLink() : 判斷被查看對(duì)象是否是一個(gè)符號(hào)鏈接文件形纺。如果是符號(hào)連接丘侠,返回true。該方法僅在fs.lstat()方法的回調(diào)函數(shù)中有效逐样。
stats.isFIFO() : 判斷被查看對(duì)象是否是一個(gè)FIFO文件蜗字。如果是FIFO打肝,返回true。FIFO是UNIX中的一種特殊類型的命令管道挪捕。該方法僅在LINUX系統(tǒng)下有效粗梭。
stats.isSocket() : 判斷被查看對(duì)象是否是一個(gè)socket文件。 如果是UNIX套接字级零,返回true断医。該方法僅在LINUX系統(tǒng)下有效。
fs.Stats對(duì)象的屬性如下:
dev : 文件或目錄所在的設(shè)備ID奏纪。該屬性值在UNIX系統(tǒng)下有效鉴嗤;
mode : 文件或目錄的權(quán)限標(biāo)志,采用數(shù)值形式表示序调;
nlink : 文件或目錄的的硬連接數(shù)量醉锅;
uid : 文件或目錄的所有者的用戶ID。該屬性值在UNIX系統(tǒng)下有效发绢;
gid : 文件或目錄的所有者的用戶組ID硬耍。該屬性值在UNIX系統(tǒng)下有效;
rdev : 字符設(shè)備文件或塊設(shè)備文件所在設(shè)備ID边酒。該屬性值在UNIX系統(tǒng)下有效经柴;**
ino : 文件或目錄的索引編號(hào)。該屬性值僅在UNIX系統(tǒng)下有效甚纲;
size : 文件的字節(jié)數(shù)口锭;
atime : 文件或目錄的訪問時(shí)間;
mtime : 文件或目錄的最后修改時(shí)間介杆;
ctime : 文件或目錄狀態(tài)的最后修改時(shí)間鹃操;
birthtime : 文件創(chuàng)建時(shí)間,文件創(chuàng)建時(shí)生成春哨。在一些不提供文件
birthtime 的文件系統(tǒng)中荆隘,這個(gè)字段會(huì)使用 ctime 或 1970-01-01T00:00Z 來(lái)填充;
6. 刪除文件 fs.unlink(path, callback)
參數(shù)說(shuō)明