您好,登錄后才能下訂單哦!
小編給大家分享一下Nodejs文件操作和stream的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
NodeJS
除了在網絡方面大放異彩,它還可以對文件進行操作,按邏輯上來說只要我們合理運用這些api
再加上一些數據處理,我們就可以完成本地很多的操作。
在上一篇我們知道如果想引用一個模塊則需要使用到require
,而今天要介紹的主角是fs
模塊,也就是NodeJS
內置的一個文件模塊,這個模塊有很多的API
供我們使用。
我們可以使用fs.mkdir
fs.writeFile
來分別創建目錄和文件。
mkdir()
可以接收三個參數,第一個是路徑,第二個是個可選項代表權限,這個我們一般不需要,第三個參數是一個回調函數,我們可以在這里面做一些處理。
/* learnNode.js */ let fs = require('fs'); fs.mkdir('js',(err)=>{ if(err){ console.log('出錯') }else{ console.log('未出錯') } })
writeFile()
可以接收四個參數,第一個是路徑,第二個是文件內容,第三個可選項代表權限,第四個是回調函數。
/* learnNode.js */ let fs = require('fs'); fs.writeFile('./js/newJs.js','console.log("寫入這個")',(err)=>{ if(err){ console.log('出錯') }else{ console.log('沒出錯') } })
可以看到我們成功創建了目錄并寫入了一個文件。
我們可以通過fs.stat
來檢測一個路徑的文件是為目錄還是文件,進而可以做一些操作。
/* learnNode.js */ let fs = require('fs'); fs.stat('./js/newJs.js', (error, stats) => { if(error) { console.log(error); return false; } else { console.log(`是否文件:${stats.isFile()}`); console.log(`是否目錄:${stats.isDirectory()}`); return false; } })
star()主要接收兩個參數第一個是要檢測的文件,第二個是一個回調函數,這個回調函數有兩個參數,分別是err
錯誤和stats
對象,這個對象提供有關文件的信息,我們可以對這個對象信息來進行判斷。
既然我們可以使用NodeJS
創建文件那當然我們也可以刪除文件,主要使用的是fs.unlink``fs.rmdir
這兩個API
。
/* learnNode.js */ let fs = require('fs'); fs.unlink('./js/newJs.js', (err) => { if (err) throw err; console.log('文件已刪除'); }); fs.rmdir('./js',(err)=>{ if (err) throw err; console.log('目錄已刪除'); })
這兩個API
都分別接收兩個參數是路徑和回調函數,執行node learnNode.js
可以看到我們文件已經成功刪除。
我們可以使用fs.rename
來對文件重命名。
/* learnNode.js */ let fs = require('fs'); fs.rename('oldJs.js','newJs.js',(err)=>{ if(err){ console.log('出錯') }else{ console.log('未出錯') } })
rename()
可以接收三個參數第一個是路徑第二個是更改的名稱,第三個是回調函數,值得注意的是,如果第一個參數和第二個參數對應的文件所在的位置不一樣時,他不會重命名之前那個文件而是直接把文件剪切放到另一個地方。
/* learnNode.js */ let fs = require('fs'); fs.rename('newJs.js','./js/oldJs.js',(err)=>{ if(err){ console.log('出錯') }else{ console.log('剪切到js文件夾內了') } })
上面我們說到創建文件的時候可以順便寫入東西,那么我們可不可以直接在文件追加文字呢?我們可以使用fs.appendFile
。
/* learnNode.js */ let fs = require('fs'); fs.appendFile('newJs.txt','我是追加的內容',(err)=>{ if(err){ console.log('出錯') }else{ console.log('追加內容') } })
appendFile()
可以接收三個參數,第一個是路徑,第二個是內容,第三個是回調函數,執行node learnNode.js
即可。
以上都是對文件進行增刪改的操作,我們現在還需要掌握一下讀取內容,我們可以使用fs.readFile
和fs.readdir
分別讀取文件和讀取目錄。
/* learnNode.js */ let fs = require('fs'); fs.readFile('newJs.txt', (err, data) => { if(err) { console.log('出錯'); } else { console.log("讀取文件成功!"); console.log(data); } })
/* learnNode.js */ let fs = require('fs'); fs.readdir('./', (err, data) => { if(err) { console.log('出錯'); } else { console.log("讀取目錄成功!"); console.log(data); } })
可以看到我們兩個API
都是接收兩個參數,第一個是路徑,第二個是回調函數,這個回調函數也有兩個參數里面包含了data
信息,我們可以打印這個data
信息來獲取內容。
最后我們來簡單聊聊stream
,翻譯過來就是流
的意思,提到流你會想到什么,河流,水流,都是從一個源頭到另一個源頭,就像水龍頭從開關到流到地面,stream
也是這樣一個過程。
Stream 有四種流類型:
Readable - 可讀操作。
Writable - 可寫操作。
Duplex - 可讀可寫操作.
Transform - 操作被寫入數據,然后讀出結果。
在stream的過程中,我們也有事件可以使用,比如檢測到錯誤觸發的error
,有數據時觸發的data
。
data - 當有數據可讀時觸發。
end - 沒有更多的數據可讀時觸發。
error - 在接收和寫入過程中發生錯誤時觸發。
finish - 所有數據已被寫入到底層系統時觸發。
接下來簡單舉個例子理解一下吧。
var fs = require("fs"); var data = ''; // 創建可讀流 var readerStream = fs.createReadStream('newJs.txt'); // 設置編碼為 utf8。 readerStream.setEncoding('UTF8'); // 處理流事件 遇到有數據時執行這個 readerStream.on('data', function(chunk) { data += chunk; console.log(chunk,'流遇到數據了') }); // 處理流事件 流結束時執行這個 readerStream.on('end',function(){ console.log(data,'流結束了'); }); // 處理流事件 流報錯時執行這個 readerStream.on('error', function(err){ console.log(err.stack); }); console.log("程序執行完畢");
我們一開始可以創建一個可讀流fs.createReadStream()
,參數是你要讀的文件路徑。
當遇到了數據時會執行readerStream.on('data',callback())
,如下圖所示。
當流結束時會執行readerStream.on('end',callback())
,如下圖所示。
我們上面演示了如何通過流讀取一個文件,接下來我們試試通過流寫入文件。
var fs = require("fs"); var data = '我是小盧,我再寫入流'; // 創建一個可以寫入的流,寫入到文件 newJs.txt 中 var writerStream = fs.createWriteStream('newJs.txt'); // 使用 utf8 編碼寫入數據 writerStream.write(data,'UTF8'); // 標記文件末尾 writerStream.end(); // 處理流事件 完成和報錯時執行 writerStream.on('finish', function() { console.log("寫入完畢"); }); writerStream.on('error', function(err){ console.log(err.stack); }); console.log("程序執行完畢");
我們首先創建一個流,然后將data
數據寫入newJs.txt
文件中。
當流寫入完畢時會執行readerStream.on('finish',callback())
,如下圖所示。
可以看到該newJs.txt
文件中已經存在了我們寫入的數據。
以上是“Nodejs文件操作和stream的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。