文件系統(File System)
文件系統簡單來講就是經過Node來操做系統中的文件
使用文件系統,須要先引入fs模塊,fs是核心模塊,直接引入 不須要下載
const fs = require('fs');
代碼逐條執行,會阻塞
打開文件
fs.openSync(path, flags[, mode]);
flags 打開文件要作的操做的類型html
返回值:node
向文件中寫入內容
fs.writeSync(fd, string[, position[, encoding]]);
保存而且關閉文件
fs.closeSync(fd);
//引入文件系統 const fs = require('fs'); //打開文件 var fd = fs.openSync('test.txt','w'); //向文件中寫入內容 fs.writeSync(fd,'重返十七歲'); //關閉文件 fs.closeSync(fd);
代碼會一塊兒執行不會阻塞
打開文件
fs.open(path, flags[, mode], callback);api
異步調用的方法,結果都是經過回調函數的參數返回的數組
回調函數有兩個參數:異步
寫入文件
fs.write(fd, string[, position[, encoding]], callback);
關閉文件
fs.close(fd, callback);
//引入fs模塊 const fs = require('fs'); //打開文件 fs.open('test.txt','w',function (err,fd) { //判斷是否出錯 if(!err){ // 寫入文件 fs.write(fd,"這是異步寫入的內容",function (err) { if(!err){ console.log('寫入成功'); } //關閉文件 fs.close(fd, function (err) { if(!err){ console.log("文件已關閉"); } }); }); }else { console.log(err); } });
fs.writeFile(file, data[, options], callback);//異步
fs.writeFileSync(file, data[, options]);//同步
options 選項,能夠對寫入進行一些設置 (可選)函數
操做符(flag):性能
const fs = require('fs'); fs.writeFile('test.txt','經過writeFile寫入的內容',{flag:"a"},function (err) { if(!err){ console.log("寫入成功"); } });
同步,異步,簡單文件的寫入都不適合大文件的寫入,性能較差,容易致使內存溢出,而流式文件寫入會 一點一點的寫入進去 不會致使內存溢出的情況學習
引入文件系統模塊
var fs = require('fs');
建立一個可寫流
fs.createWriteStream(path[, options]);
打開文件
var ws = fs.createWriteStream('hello3.txt');
監聽流 可選
ws.once("open",function () { console.log("流打開了"); }); ws.once("close",function () { console.log("流關閉了"); });
on(事件字符串,回調函數)ui
once(事件字符串,回調函數)編碼
經過ws向文件中輸出內容
ws.write("經過可寫流寫入文件的內容1"); ws.write("經過可寫流寫入文件的內容2"); ws.write("經過可寫流寫入文件的內容3"); ws.write("經過可寫流寫入文件的內容4"); ws.write("經過可寫流寫入文件的內容5");
關閉流
ws.end();
fs.readFile(path[, options], callback); fs.readFileSync(path[, options]);
path 要讀取文件的路徑
callback 回調函數 經過回調函數將讀取到的內容返回
var fs = require('fs'); fs.readFile('0.jpg',function (err,data) { if (!err) { // console.log(data); //將data寫入文件中 fs.writeFile('hello.jpg',data,function (err) { if(!err){ console.log("文件寫入成功"); } }) } });
流式文件讀取也適用於一些比較大的文件,能夠分屢次將文件讀取到內存中
var fs = require('fs'); // 建立一個可讀流 var rs = fs.createReadStream('0.jpg'); //建立一個可寫流 var ws = fs.createWriteStream('test.jpg') // 監聽流的開啓和關閉 rs.once('open',function () { console.log("可讀流打開了"); }); rs.once('close',function () { console.log("可讀流關閉了"); //數據讀取完畢,關閉可寫流 ws.end(); }); ws.once('open',function () { console.log("可寫流打開了"); }); ws.once('close',function () { console.log("可寫流關閉了"); }); // 若是要讀取可讀流中的數據,必需要爲可讀流綁定一個data事件,data事件綁定完畢,他會自動開始讀取數據 rs.on("data",function (data) { // console.log(data.length); //將讀取到的數據寫入到可寫流中 ws.write(data); });
var fs = require('fs'); // 建立一個可讀流 var rs = fs.createReadStream('0.jpg'); //建立一個可寫流 var ws = fs.createWriteStream('test.jpg') // 監聽流的開啓和關閉 rs.once('open',function () { console.log("可讀流打開了"); }); rs.once('close',function () { console.log("可讀流關閉了"); }); ws.once('open',function () { console.log("可寫流打開了"); }); ws.once('close',function () { console.log("可寫流關閉了"); }); //pipe 能夠將可讀流中的內容,直接輸出到可寫流裏面 rs.pipe(ws);
fs.existsSync(path);
例子
var isExists = fs.existsSync('test.jpg'); console.log(isExists);
fs.stat(path[, options], callback) fs.statSync(path[, options])
例子 官網
fs.stat('test.jpg',function (err,stats) { /** * size 文件的大小 * isFile() 是否 是一個文件 * isDirectory() 是否 是一個文件夾(目錄) */ if(!err){ console.log(stats.isDirectory() ); } });
fs.unlink(path, callback) fs.unlinkSync(path)
例子
fs.unlinkSync("test.jpg");
fs.readdir(path[, options], callback) fs.readdirSync(path[, options])
例子
fs.readdir('.',function (err,files) { if(!err){ console.log(files); } });
fs.truncate(path[, len], callback) fs.truncateSync(path[, len])
例子
fs.truncateSync('test.txt',10);
fs.mkdir(path[, mode], callback) fs.mkdirSync(path[, mode])
例子
fs.mkdirSync("test");
fs.rmdir(path, callback) fs.rmdirSync(path)
例子
fs.rmdirSync("test");
fs.rename(oldPath, newPath, callback) fs.renameSync(oldPath, newPath)
參數
例子
fs.rename('test1.jpg','test2.jpg',function (err) { if (!err) { console.log('修改爲功'); } });
fs.watchFile(filename[, options], listener)
參數
options 配置選項
listener 回調函數 當文件發生變化時 回調函數會執行
在回調函數中有兩個參數
prev 修改前文件的狀態
例子 官網
fs.watchFile('test.txt',{interval:1000},function (curr, prev) { console.log("修改前文件大小==>"+prev.size); console.log("修改後文件大小==>"+curr.size); });