nodejs模組之fs&&stream

來源:互聯網
上載者:User

標籤:同步   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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.