nodeJs檔案系統(fs)與流(stream)

2022-07-08 10:12:16 字數 4975 閱讀 2816

一、簡介

本文將介紹node.js檔案系統(fs)和流(stream)的一些api已經引數使用情況。

二、目錄

檔案系統將介紹以下方法:

1.fs.readfile

2.fs.writefile

3.fs.open

4.fs.read

5.fs.stat

6.fs.close

7.fs.mkdir

8.fs.rmdir

9.fs.readdir

10.fs.unlink

stream流的四種型別readable,writable,duplex,transform以及stream物件的事件。

三、檔案系統fs主要方法介紹

1、fs.readfile

readfile方法主要是讀取檔案內容,非同步操作。

var fs = require('fs')

fs.readfile('a.txt',function

(err,data)

else

})

2、fs.writefile

writefile以非同步的方式寫入檔案,fs.writefile(file,data[,options],callback)

var fs = require('fs')

console.log("準備寫入檔案")

fs.writefile('input.txt',"寫入的內容",function

(err)

else

})

3、fs.open()

在非同步方式下開啟檔案,fs.open(path,flags[,mode],callback)

var fs = require("fs");

//非同步開啟檔案

console.log("準備開啟檔案");

fs.open('a.txt', 'r+', function(err, fd)

console.log("檔案開啟成功!");

});

4、fs.read()

此方法為非同步方式下讀取檔案,格式:fs.read(fd,buffer,offset,length,position,callback)

var fs = require("fs");

var buf = new buffer(1024);

console.log("準備開啟檔案!");

fs.open('at.txt', 'r+', function

(err, fd)

fs.read(fd, buf, 0, buf.length, 0, function

(err, bytes)

//僅輸出讀取的位元組

if(bytes > 0)

});});

5、fs.stat()

此方法為非同步方式獲取檔案資訊,格式:fs.stat(path,callback)

fs.stat('fs.js', function

(err, stats) )

非同步返回的stats類的例項有很多方法,比如stats.isfile()判斷是否是檔案,stats.isdirectory()判斷是否是目錄,。。。。。。

6、fs.close()

fs.close()是以非同步的方式關閉檔案,語法格式:fs.close(fd,callback),引數如下:

d- 通過 fs.open() 方法返回的檔案描述符。

callback- **函式,沒有引數。

7、fs.mkdir()

此方法為建立目錄,格式:fs.mkdir(path[,mode],callback),引數如下:

path:路徑。

mode:目錄許可權,預設0777.。

callback:**,沒有引數。

var fs = require("fs");

console.log("建立目錄/test/");

fs.mkdir("/test/",function

(err)

console.log("建立/test目錄成功。");

});

8、fs.rmdir()

刪除目錄,語法格式:fs.rmdir(path,callback)

9、fs.readdir()

此方法為讀取目錄,語法格式:fs.readdir(path,callback),callback**函式有兩個引數,第乙個是err,第二個為目錄下的檔案陣列files。

var fs = require("fs");

console.log("檢視 /tmp 目錄");

fs.readdir("/tmp/",function

(err, files)

files.foreach(

function

(file));

});

10、fs.unlink()

此方法作用為刪除檔案,格式:fs.unlink(path,callback)

var fs = require("fs");

console.log("準備刪除檔案!");

fs.unlink('input.txt', function

(err)

console.log("檔案刪除成功!");

});

四、stream流型別與事件介紹

1、 stream:流是乙個抽象介面,有四種流型別:

readable :可讀;

writable :可寫操作;

duplex :可讀可寫操作;

transform :操作被寫入資料,然後讀出結果。

所有的stream物件都是eventemitter 的例項,常用事件有:

data:當有資料可讀觸發,

end:沒有資料可讀觸發,

error:發生錯誤時觸發,

finish:完成觸發。

2、從流中讀資料

var fs = require("fs");

var data = '';

//建立可讀流

var readerstream = fs.createreadstream('input.txt');

//設定編碼為 utf8。

readerstream.setencoding('utf8');

//處理流事件 --> data, end, and error

readerstream.on('data', function

(chunk) );

readerstream.on('end',function

());

readerstream.on('error', function

(err));

console.log("程式執行完畢");

3、寫入流:

var fs = require("fs");

var data = '寫入流資料';

//建立乙個可以寫入的流,寫入到檔案 output.txt 中

var writerstream = fs.createwritestream('output.txt');

//使用 utf8 編碼寫入資料

writerstream.write(data,'utf8');

//標記檔案末尾

writerstream.end();

//處理流事件 --> data, end, and error

writerstream.on('finish', function

() );

writerstream.on('error', function

(err));

console.log("程式執行完畢");

4、管道流(pipe)

var fs = require("fs");

//建立乙個可讀流

var readerstream = fs.createreadstream('input.txt');

//建立乙個可寫流

var writerstream = fs.createwritestream('output.txt');

//管道讀寫操作

//讀取 input.txt 檔案內容,並將內容寫入到 output.txt 檔案中

readerstream.pipe(writerstream);

console.log("程式執行完畢");

5、鏈式流

鏈式是通過連線輸出流到另外乙個流並建立多個流操作鏈的機制。鏈式流一般用於管道操作。

接下來我們就是用管道和鏈式來壓縮和解壓檔案。

//

壓縮var fs = require("fs");

var zlib = require('zlib');

//壓縮 input.txt 檔案為 input.txt.gz

fs.createreadstream('input.txt')

.pipe(zlib.creategzip())

.pipe(fs.createwritestream('input.txt.gz'));

console.log("檔案壓縮完成。");

//解壓

var fs = require("fs");

var zlib = require('zlib');

//解壓 input.txt.gz 檔案為 input.txt

fs.createreadstream('input.txt.gz')

.pipe(zlib.creategunzip())

.pipe(fs.createwritestream('input.txt'));

console.log("檔案解壓完成。");

五、總結

深入Nodejs模組fs 檔案系統操作

node 的fs文件密密麻麻的 api 非常多,畢竟全面支援對檔案系統的操作。文件組織的很好,操作基本分為檔案操作 目錄操作 檔案資訊 流這個大方面,程式設計方式也支援同步 非同步和 promise。本文記錄了幾個文件中沒詳細描寫的問題,可以更好地串聯fs文件思路 檔案描述符是乙個非負整數。它是乙個...

簡單的nodejs 檔案系統(fs)讀寫例子。

在nodejs中,可以通過fs file system 模組進行檔案的i o操作。下面進行fs檔案系統的使用例項 1 模組呼叫宣告 var fs require fs var path require path fs為檔案模組,path為系統路徑模組。2 可以使用writefile方法,將資料寫入檔...

nodejs檔案系統

1 讀取檔案 一下子讀取整個檔案 const fs require fs fs.readfile f xpbp kcbp2.81 win32 gx bin log user 20191111 user data0.log function err,data console.log data.tost...