文件系統(tǒng)是任何一種語言都最常用的酷勺,之前一直都沒搞懂python的讀寫模式切平,看到node文件系統(tǒng)有點明白了
引用
var fs = require("fs")
異步同步
node幾乎所有的API都同時支持異步和同步埋凯,就這一點幾乎算是前端的革命性框架了点楼。
// 異步讀取
fs.readFile('input.txt', function (err, data) {
if (err) {
return console.error(err);
}
console.log("異步讀取: " + data.toString());
});
// 同步讀取
var data = fs.readFileSync('input.txt');
console.log("同步讀取: " + data.toString());
文件讀寫及讀寫模式
fs.open(path, flags[, mode], callback)
- path 文件的路徑。
- flags 文件打開的行為
- mode 設(shè)置文件模式(權(quán)限)白对,文件創(chuàng)建默認權(quán)限為 0666(可讀掠廓,可寫)。
- callback 回調(diào)函數(shù)甩恼,帶有兩個參數(shù)如:callback(err, fd)蟀瞧。
- openSync 不需要callback參數(shù)
// 異步打開
fs.open(path, flags[mode], callback)
// 同步打開
fs.openSync(path, flags[mode])
// 寫文件
fs.writeFile(file, data[options], callback)
// 讀文件
fs.read(fd, buffer, offset, length, position, callback)
讀寫模式
Flag | 描述 |
---|---|
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.writeFile(file, data[, options], callback)
寫文件默認w模式灶轰,也就是覆寫模式
options:該參數(shù)是一個對象谣沸,包含 {encoding, mode, flag}。
默認編碼為 utf8, 模式為 0666 笋颤, flag 為 'w'
console.log("準備寫入文件:");
fs.writeFile("123.txt", "Hello World被寫入!", function(err){
if (err) {
return console.log(err);
}
console.log("寫入完成乳附!");
fs.readFile("123.txt", function(err, data){
if (err) {
return console.error(err);
}
console.log("異步讀取文件數(shù)據(jù): " + data.toString());
});
});
讀文件
fs.read(fd, buffer, offset, length, position, callback)
- fd - 通過 fs.open() 方法返回的文件描述符。
- buffer - 數(shù)據(jù)寫入的緩沖區(qū)伴澄。
- offset - 緩沖區(qū)寫入的寫入偏移量赋除。
- length - 要從文件中讀取的字節(jié)數(shù)。
- position - 文件讀取的起始位置非凌,如果 position 的值為 null举农,則會從當前文件指針的位置讀取。
- callback - 回調(diào)函數(shù)敞嗡,有三個參數(shù)
- err 為錯誤信息
- bytesRead 表示讀取的字節(jié)數(shù)
- buffer 為緩沖區(qū)對象颁糟。
fs.open('123.txt', 'r', function(err, data) {
if (err) {
return console.error(err);
}
console.log("文件打開成功!");
console.log("準備讀取文件:");
fs.read(data, buf, 0, buf.length, 0, function(err, bytes){
if (err){
return console.log(err);
}
if(bytes > 0){
console.log("內(nèi)容為:", buf.slice(0, bytes).toString());
}else{
console.log("讀取字節(jié)異常:", bytes);
}
});
});
獲取文件信息
fs.statSync(path[, options]) // 同步
fs.stat(path[, options], callback) // 異步
- path 文件路徑喉悴。
- callback 回調(diào)函數(shù)棱貌,帶有兩個參數(shù)如:(err, stats), stats 是 fs.Stats 對象。
fs.stat(path)執(zhí)行后箕肃,會將stats類的實例返回給其回調(diào)函數(shù)婚脱。可以通過stats類中的提供方法判斷文件的相關(guān)屬性突雪。
方法 | 描述 |
---|---|
stats.isFile() | 如果是文件返回 true起惕,否則返回 false。 |
stats.isDirectory() | 如果是目錄返回 true咏删,否則返回 false惹想。 |
stats.isBlockDevice() | 如果是塊設(shè)備返回 true,否則返回 false督函。 |
stats.isCharacterDevice() | 如果是字符設(shè)備返回 true嘀粱,否則返回 false。 |
stats.isSymbolicLink() | 如果是軟鏈接返回 true辰狡,否則返回 false锋叨。 |
stats.isFIFO() | 如果是FIFO,返回true宛篇,否則返回 false娃磺。FIFO是UNIX中的一種特殊類型的命令管道。 |
stats.isSocket() | 如果是 Socket 返回 true叫倍,否則返回 false偷卧。 |
fs.stat("123.txt", function(err, stat){
console.log("文件信息:", stat)
});
其他文件操作
- 關(guān)閉文件
fs.close(fd, callback)
- 截取文件
fs.ftruncate(fd, len, callback)
- 刪除文件
fs.unlink(path, callback)
- 創(chuàng)建目錄
fs.mkdir(path[mode], callback)
- 查看目錄
fs.readdir(path, callback)
- 刪除目錄
fs.rmdir(path, callback)
注:
- 查看目錄:查看該目錄下的文件列
- 刪除目錄:該目錄為空方可刪除
- 刪除非空目錄可參考第三方框架豺瘤,如
rimraf
等