一、簡介
本文將介紹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...