file system 可以在服務(wù)端讀取文件和數(shù)據(jù) 方法是同步 + 異步共存
同步方法易使用 (剛開(kāi)始運(yùn)行 )
異步方法不會(huì)阻塞主線(xiàn)程 (運(yùn)行起來(lái)后用異步)
let fs = require('fs');
let path = require('path');
// 讀取文件 文件不存在會(huì)報(bào)錯(cuò)
// 寫(xiě)入文件 文件不存在會(huì)創(chuàng)建文件
fs.readFile('./note.md',function(err,data){
if(err){
console.log(err)
}
fs.writeFile('./note.md1',data,function(){
})
});
64k以下的讀寫(xiě)可以用上面這種方式
不適合大文件來(lái)使用,否則可能會(huì)導(dǎo)致內(nèi)存的浪費(fèi)
可以讀取一點(diǎn) 寫(xiě)入一點(diǎn)
手動(dòng)按照自己來(lái)讀取 fs.open fs.read fs.write fs.close
r 讀取
w 寫(xiě)入
r+ 在讀的基礎(chǔ)上可以寫(xiě) 但是文件不存在會(huì)報(bào)錯(cuò)
w+ 在寫(xiě)的基礎(chǔ)上讀取 如果文件不存在 會(huì)創(chuàng)建
const fs = require("fs");
// 讀取一點(diǎn) 寫(xiě)一點(diǎn),不會(huì)導(dǎo)致淹沒(méi)可用內(nèi)存
const SIZE = 5;
let buffer = Buffer.alloc(SIZE);
fs.open("./note.md", "r", function(err, rfd) {
// number
fs.open("./copy.md", "w", function(err, wfd) {
let readOffset = 0;
let writeOffset = 0;
// co
function next() {
fs.read(rfd, buffer, 0, SIZE, readOffset, function(err, bytesRead) {
if(bytesRead === 0){
fs.close(wfd,()=>{})
return fs.close(rfd,()=>{});
}
fs.write(wfd, buffer, 0, bytesRead, writeOffset, function() {
readOffset += bytesRead;
writeOffset += bytesRead;
next();
});
});
}
next();
});
});
// 兩個(gè)耦合性比較高的代碼怎么拆分, 發(fā)布訂閱/stream
//寫(xiě)入時(shí) 沒(méi)有會(huì)創(chuàng)建 如果有會(huì)清空
fs.appendFileSync('1.js','123')
// 如果文件已經(jīng)存在 會(huì)將文件中的內(nèi)容清空
fs.writeFileSync('1.js','123',{flag:'a'});