Node.js進行文件讀取與復制的系統(tǒng)總結
Node.js 文件讀取與復制相關內容的系統(tǒng)總結,包括 同步讀取、異步讀取、流式讀取、復制操作、兩者對比及內存測試。
一、Node.js 文件讀取方式總結
Node.js 使用 fs(文件系統(tǒng))模塊進行文件操作:
1.同步讀取(Blocking)
const fs = require('fs');
const data = fs.readFileSync('file.txt', 'utf-8');
console.log(data);
? 優(yōu)點:邏輯簡單,適合初始化配置、命令行工具等無需并發(fā)場景。
?缺點:阻塞線程,讀取大文件會卡住整個應用。
當然可以!下面是一個使用 Node.js 同步方式進行文件復制的完整例子,先同步讀取文件內容,再同步寫入到目標文件。
示例:使用 fs.readFileSync + fs.writeFileSync 實現文件復制
const fs = require('fs');
try {
// 同步讀取源文件內容
const data = fs.readFileSync('source.txt', 'utf-8');
// 同步寫入到目標文件
fs.writeFileSync('target.txt', data);
console.log('文件復制成功 ?');
} catch (err) {
console.error('復制失敗 ?', err);
}
說明:
- fs.readFileSync(path, encoding):阻塞方式讀取文件內容
- fs.writeFileSync(path, data):阻塞方式將內容寫入文件
- 適合小型文本文件復制(例如:配置文件、日志等)
注意:
會阻塞事件循環(huán),若文件大或復制頻繁,不適合用在服務端生產環(huán)境。
大文件建議使用流式復制方式。
2. 異步讀?。∟on-blocking)
const fs = require('fs');
fs.readFile('file.txt', 'utf-8', (err, data) => {
if (err) throw err;
console.log(data);
});
- ? 優(yōu)點:非阻塞、適合高并發(fā),不會卡住主線程。
- ?缺點:邏輯較復雜,需使用回調、Promise 或 async/await。
3. 流式讀取(Stream)
const fs = require('fs');
const readStream = fs.createReadStream('file.txt', 'utf-8');
readStream.on('data', chunk => {
console.log('讀取塊:', chunk);
});
readStream.on('end', () => {
console.log('讀取完成');
});
- ? 優(yōu)點:適合讀取大文件、低內存消耗
- ?缺點:實現復雜,處理邏輯需分塊處理。
二、讀取場景對比
| 方式 | 適合場景 | 特點 |
|---|---|---|
| 同步讀取 | 小文件、本地 CLI 工具等 | 簡單,阻塞線程 |
| 異步讀取 | Web 服務、文件上傳 | 非阻塞,高性能 |
| 流式讀取 | 視頻、大型日志、備份等 | 節(jié)省內存,分塊 |
三、Node.js 文件復制方式
1. 同步復制
const fs = require('fs');
fs.copyFileSync('source.txt', 'target.txt');
? 簡單,適合少量小文件。
?阻塞線程,大量并發(fā)時不可用。
2. 流式復制(推薦)
const fs = require('fs');
const readStream = fs.createReadStream('source.txt');
const writeStream = fs.createWriteStream('target.txt');
readStream.pipe(writeStream);
? 非阻塞,適合大文件。
? 邊讀邊寫,內存占用低。
? 無法輕松控制復制進度或中斷。
四、復制方式對比
| 方法 | 內存占用 | 性能 | 使用場景 |
|---|---|---|---|
| 同步復制 | 高 | 低 | 小型項目、工具類 |
| 流式復制 | 低 | 高 | 服務端、大文件 |
五、內存占用測試示例
可以通過 process.memoryUsage() 查看 Node.js 內存使用:
console.log(process.memoryUsage());
示例:對比讀取一個 500MB 文件時的內存變化:
// 流式讀取內存較低
const stream = fs.createReadStream('bigfile.txt');
stream.on('data', chunk => {
console.log(process.memoryUsage().heapUsed);
});
// readFileSync 讀取整個文件占用大
const content = fs.readFileSync('bigfile.txt');
console.log(process.memoryUsage().heapUsed);
總結重點
| 功能 | 同步 | 異步 | 流式 |
|---|---|---|---|
| 阻塞 | ? 是 | ? 否 | ? 否 |
| 內存消耗 | ? 高 | ?? 中 | ? 低 |
| 實現復雜度 | ? 簡單 | ?? 中等 | ? 高 |
| 適合場景 | 啟動、工具 | Web 服務 | 大文件處理 |
到此這篇關于Node.js進行文件讀取與復制的系統(tǒng)總結的文章就介紹到這了,更多相關Node.js文件讀取與復制內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
前端常見面試題之async/await和promise的區(qū)別
async/await是異步代碼的新方式,以前的方法有回調函數和Promise,下面這篇文章主要給大家介紹了關于前端常見面試題之async/await和promise區(qū)別的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-07-07

