檔案系統(File System):
- 在Node中,檔案系統的互動是非常重要的,伺服器的本質就是將本地的檔案傳送給客戶端,
- Node通過fs模組來和檔案系統進行互動,該模組提供了一些標準的檔案訪問API類開啟、讀取、寫入檔案、以及與其互動。
- 要是用fs模組,首先要從核心模組中載入; 使用 const fs= require(`fs`) ; 來引入
fs使用特點:
- fs模組中的所有操作都有兩種形式可供選擇同步和非同步,
- 同步檔案系統會阻塞程式的執行,也就是除非操作完畢,否則不會向下執行程式碼。
- 非同步檔案系統不會阻塞程式的執行,而是在操作完成時,通過回撥函式將結果返回。
//1. 引入模組
const fs= require("fs");
// console.log(fs)
//2. 開啟檔案
// fs.open 非同步讀取(通常用非同步 需設定回撥函式)
// fs.openSync 同步讀取(讀取時會阻塞執行緒)
let hello = fs.openSync("hello.txt", "w");
// 不存在會自動新建
//3. 寫入內容
fs.writeFileSync(hello,`hello word!`);
//4. 儲存並退出
fs.closeSync(hello);
[](https://github.com/AnsonZnl/S…
檔案操作:
- 開啟檔案:
fs.open(path,flags[,mode],callback)
非同步開啟 非同步都是回撥 回撥巢狀回撥fs.openSync(path,flags[,mode])
同步開啟
檔案標記(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.寫入內容
fs.writeFileSync(fd,"hello world!");
//4. 儲存並關閉
fs.closeSync(fd);
二、非同步開啟檔案
//1.引入模組
let fs = require(`fs`);
//2. 開啟檔案
fs.open(`1.txt`, `a`, (err, fd)=>{
//2.1判斷是否出錯
if(!err){
//正確 2.2寫入檔案
fs.writeFile(fd, "今天天.....氣真好!", (err)=>{
//2.2.1 寫入成功
if(!err){
console.log(`寫入成功`);
}else{
throw err;
}
//2.3 關閉檔案
fs.close(fd, (err)=>{
if(!err){
console.log(`檔案以儲存並關閉`)
}else{
throw err;
}
})
})
}else{
throw err;
}
})
[](https://github.com/AnsonZnl/S…
使用檔案流寫入
檔案流寫入: 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(`通道已經開啟`);
})
ws.once(`close`, ()=>{
console.log(`通道已經關閉`);
})
//4. 寫入內容
ws.write(`我愛你,`);
ws.write(`我愛你,`);
ws.write(`我愛你,`);
[](https://github.com/AnsonZnl/S…
讀寫檔案:
文件地址: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 預設讀取的是二進位制 使用toString() 方法轉換成
}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;
}
});
[](https://github.com/AnsonZnl/S…
讀取視訊:
//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. 建立管道
re.pipe(ws);//檔案流傳輸
console.log(`檔案流傳輸完成`)
參考:詳解NodeJS檔案系統fs
我的GitHub總結的NodeJS筆記