文件系統(tǒng)(File System):
- 在Node中,文件系統(tǒng)的交互是非常重要的骄酗,服務(wù)器的本質(zhì)就是將本地的文件發(fā)送給客戶端稀余,
- Node通過fs模塊來和文件系統(tǒng)進(jìn)行交互,該模塊提供了一些標(biāo)準(zhǔn)的文件訪問API類打開趋翻、讀取睛琳、寫入文件、以及與其交互踏烙。
- 要是用fs模塊师骗,首先要從核心模塊中加載; 使用 const fs= require('fs') ; 來引入
fs使用特點(diǎn):
- fs模塊中的所有操作都有兩種形式可供選擇同步和異步讨惩,
- 同步文件系統(tǒng)會(huì)阻塞程序的執(zhí)行辟癌,也就是除非操作完畢,否則不會(huì)向下執(zhí)行代碼荐捻。
- 異步文件系統(tǒng)不會(huì)阻塞程序的執(zhí)行愿待,而是在操作完成時(shí),通過回調(diào)函數(shù)將結(jié)果返回靴患。
//1\. 引入模塊
const fs= require("fs");
// console.log(fs)
//2\. 打開文件
// fs.open 異步讀取(通常用異步 需設(shè)置回調(diào)函數(shù))
// fs.openSync 同步讀纫觥(讀取時(shí)會(huì)阻塞線程)
let hello = fs.openSync("hello.txt", "w");
// 不存在會(huì)自動(dòng)新建
//3\. 寫入內(nèi)容
fs.writeFileSync(hello,'hello word!');
//4\. 保存并退出
fs.closeSync(hello);
文件操作:
- 打開文件:
fs.open(path,flags[,mode],callback)
異步打開 異步都是回調(diào) 回調(diào)嵌套回調(diào)
fs.openSync(path,flags[,mode])
同步打開
文件標(biāo)記(flags): http://nodejs.cn/api/fs.html#fs_fs_open_path_flags_mode_callback
一鸳君、同步打開文件
//1\. 引入模塊
let fs = require('fs');
//2.打開文件 同步
var fd=fs.openSync('1.txt', 'w');
//3.寫入內(nèi)容
fs.writeFileSync(fd,"hello world!");
//4\. 保存并關(guān)閉
fs.closeSync(fd);
二、異步打開文件
//1.引入模塊
let fs = require('fs');
//2\. 打開文件
fs.open('1.txt', 'a', (err, fd)=>{
//2.1判斷是否出錯(cuò)
if(!err){
//正確 2.2寫入文件
fs.writeFile(fd, "今天天.....氣真好患蹂!", (err)=>{
//2.2.1 寫入成功
if(!err){
console.log('寫入成功');
}else{
throw err;
}
//2.3 關(guān)閉文件
fs.close(fd, (err)=>{
if(!err){
console.log('文件以保存并關(guān)閉')
}else{
throw err;
}
})
})
}else{
throw err;
}
})
使用文件流寫入
文件流寫入: http://nodejs.cn/api/fs.html#fs_fs_createwritestream_path_options
//同步操作
//1\. 引入模塊
let fs= require('fs');
//2.建立通道
let ws = fs.createWriteStream('fsw.txt')
//3.打開通道
ws.once('open', ()=>{
console.log('通道已經(jīng)打開');
})
ws.once('close', ()=>{
console.log('通道已經(jīng)關(guān)閉');
})
//4\. 寫入內(nèi)容
ws.write('我愛你或颊,');
ws.write('我愛你,');
ws.write('我愛你传于,');
讀寫文件:
文檔地址:http://nodejs.cn/api/fs.html#fs_fs_readfile_path_options_callback
讀取文檔:
//1\. 引入模塊
let fs = require('fs');
//2\. 讀取文件
fs.readFile('source/hello.txt','utf8',(err,data)=>{
//判斷是否成功
if(!err){
console.log(data);//
// console.log(data.toString());
//data 默認(rèn)讀取的是二進(jìn)制 使用toString() 方法轉(zhuǎn)換成
}else{
throw err;
}
})
讀取圖片:
//3\. 讀取圖片
fs.readFile("source/psb.jpg",(err,data)=>{
//判斷是否成功
if(!err){
//寫入圖片
fs.writeFile('img.jpg', data, (err)=>{
if(!err){
console.log('寫入成功囱挑!')
}else{
throw err;
}
})
}else{
throw err;
}
});
讀取視頻:
//1\. 引入模塊
let fs= require('fs');
//2\. 讀取視頻
fs.readFile('source/cddbb.mp4', (err, data)=>{
if(!err){
// 寫入視頻
fs.writeFile('nmx.mp4', data, (err)=>{
if(!err){
console.log('寫入成功!');
}else{
throw err;
}
})
}else{
throw err;
}
})
//3\. 流式文件的讀入(批量文件處理)
let re= fs.createReadStream('source/cddbb.mp4');
//建立讀取流
let ws= fs.createWriteStream('新建的視頻.mp4');
//建立寫入流
//4\. 創(chuàng)建管道
re.pipe(ws);//文件流傳輸
console.log('文件流傳輸完成')
參考:詳解NodeJS文件系統(tǒng)fs
我的GitHub總結(jié)的NodeJS筆記