標籤:同步 return ack str director llb string dir fine
nodejs的檔案系統fs模組,可以實現對檔案、目錄等的操作,stream模組實現對檔案資料的斷續讀寫操作
一、檔案操作
fs.readFile(file[,options],callback) 非同步讀取資料,參數err,data
fs.readFileSync(file[,options]) 同步讀取資料,返回讀取的資料
fs.writeFile(file, data[,options],callback) 非同步寫資料,參數err
fs.writeFileSync(file,data[,options]) 同步寫資料,返回undefined
fs.stat(path,callback) 返回一個stats對象到回呼函數參數中, 通過該stats對象擷取檔案資訊,參數err,stats
fs.statSync(path) 同步,返回一個stats對象
------------------------------------------------------------------
stats對象擷取資訊方法:
stats.isFile() 是否為檔案
stats.isDirectory() 是否為目錄(檔案夾)
stats.isBlockDevice()
stats.isCharacterDevice()
stats.isSymbolicLink() (only valid with fs.lstat())
stats.isFIFO()
stats.isSocket()
-------------------------------------------------------------
在index.js同級目錄下建立一個file.txt, 裡面填寫資料作為測試用,比如Hello World
1、fs.readFile
"use srict";const fs = require(‘fs‘);fs.readFile(‘./file.txt‘, ‘utf-8‘, function (err, data) { if (err) { console.log(err); return; } console.log(data);});
2、fs.readFileSync
"use srict";const fs = require(‘fs‘);const data = fs.readFileSync(‘./file.txt‘, ‘utf-8‘);console.log(data);
3、fs.writeFile
讀取file.txt檔案資料,然後寫到data.txt檔案中,如果data.txt不存在,會自動建立然後寫入,如果存在會先刪除data.txt中資料,然後寫入覆蓋。
"use srict";const fs = require(‘fs‘);fs.readFile(‘./file.txt‘, ‘utf-8‘, function (err, data) { if (err) { console.log(err); return; } fs.writeFile(‘./data.txt‘, data + ‘ from file.txt‘, ‘utf-8‘, function (err) { if (err) { console.log(err); return; } console.log(‘write success‘); })});
4、fs.stat
"use srict";const fs = require(‘fs‘);fs.stat(‘./file.txt‘, (err, stats) => { if (err) { console.log(err); return; }else { if (stats.isFile()) { fs.readFile(fileName, ‘utf-8‘, (err, data) => { if (err) { console.log(err); return; } fs.writeFile(‘./swFile.txt‘, data + ‘from file.txt by stat‘, ‘utf-8‘, (err) => { if (err) { console.log(err); return; } console.log(‘write success stat‘); }) }); } else { console.log(‘The file is dirtory‘); } }});
二、檔案夾操作
fs.mkdir(path[,mode],callback) 建立檔案夾,參數mode指的是檔案夾許可權,參數err
fs.mkdirSync(path[,mode]) 同步建立檔案夾,返回undefined
fs.readdir(path[,options],callback) 讀取檔案夾,返回一個數組到回調參數,包含該檔案夾所有子內容的名字string,不包括子孫內容,參數err, dir
fs.readdirSync(path[,options]) 同步讀取檔案夾,返回讀取的檔案夾數組資料
"use srict";const fs = require(‘fs‘);fs.readdir(‘./fsDemo‘, function (err, dir) { if (err) { console.log(err); return; } console.log(dir); // [‘demo01‘, ‘demo02‘]});
四、流操作(stream模組)
fs.createReadStream(path[,options]) 建立一個讀流操作對象,返回一個readable對象
-------------------------------------------------------
readable對象支援的事件:
data:當有資料讀取的時候,返回讀取的資料到回呼函數參數中
readable:當有資料可讀取的時候觸發,但不會讀取資料,僅僅做判斷用
end:當資料全部讀取完畢的時候觸發
readable對象支援的方法:
rs.pause() 暫停讀取資料
rs.resume() 開啟讀取流,恢複讀取資料
rs.read() 讀取當前剩餘資料並返回,沒有則返回null
options 是一個對象或者字串,各個預設值為
{
flags: ‘r‘,
encoding: null,
fd: null,
mode: 0o666,
autoClose: true
}
---------------------------------------------------
fs.createWriteStream(path[,options]) 寫流操作,返回一個writable對象
---------------------------------------------------
writable支援的事件:
finish:當end方法被調用,且所有資料都寫入完畢時觸發
pipe:當對象通過pipe寫入資料時
writable對象支援的方法:
ws.write(chunk[,encoding][,callback]) 寫資料,chunk是要寫入的資料(string|buffer) ,callback:寫入後回呼函數
ws.end() 關閉寫入流
----------------------------------------------------
pipe方法:
rs.pipe(ws) 從左向右看,建立一個管道,將rs讀取的資料通過管道流入到ws寫入
-----------------------------------------------------------------------------------------------------------
fs.createReadStream
"use srict";const fs = require(‘fs‘);const rs = fs.createReadStream(‘./file.txt‘, ‘utf-8‘);// 當讀取資料時觸發,將讀取的資料列印rs.on(‘data‘, function (data) { console.log(data);});// 當有資料可讀是,將剩餘資料全部列印出來rs.on(‘readable‘, function() { console.log(rs.read())});// 當讀取結束時,列印read finishedrs.on(‘end‘, function () { console.log(‘read finished‘);});
fs.createWriteStream
"use strict";const fs = require(‘fs‘);const rs = fs.createReadStream(‘./file.txt‘, ‘utf-8‘); const ws = fs.createWriteStream(‘./data.txt‘, { flags: ‘w‘, // a 追加,w 刪除後再寫,預設為w });// 當讀取資料時觸發,將讀取的資料寫入rs.on(‘data‘, function (data) { ws.write(data);});// 當讀取資料結束時,關閉寫入流,列印write endrs.on(‘end‘, function (data) { ws.end(); console.log(‘write end‘);});// 其實可以通過pipe方法,一句代碼實現上邊的功能,如下// rs.pipe(ws);
-------------------------------------------------------------------------------------end
nodejs模組之fs&&stream