<h2><strong>文件系統(File System):</strong></h2> <ol> <li>在Node中,文件系統的交互是很是重要的,服務器的本質就是將本地的文件發送給客戶端,</li> <li>Node經過fs模塊來和文件系統進行交互,該模塊提供了一些標準的文件訪問API類打開、讀取、寫入文件、以及與其交互。</li> <li>要是用fs模塊,首先要從核心模塊中加載; 使用 const fs= require('fs') ; 來引入</li> </ol> <h3>fs使用特色:</h3> <ol> <li>fs模塊中的全部操做都有兩種形式可供選擇同步和異步,</li> <li>同步文件系統會阻塞程序的執行,也就是除非操做完畢,不然不會向下執行代碼。</li> <li>異步文件系統不會阻塞程序的執行,而是在操做完成時,經過回調函數將結果返回。</li> </ol>html
//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);
<p>[](<a href="https://github.com/AnsonZnl/StudyNodeJS/blob/master/%E8%AF%BE%E7%A8%8B%E7%AC%94%E8%AE%B0/%E8%AF%BE%E6%97%B630-%E8%AF%BE%E6%97%B634%E7%AC%94%E8%AE%B0.md#%E8%AF%BE%E6%97%B631)" rel="nofollow noreferrer">https://github.com/AnsonZnl/S...</a></p> <h3>文件操做:</h3> <ol><li>打開文件:</li></ol> <p><code>fs.open(path,flags[,mode],callback)</code><br> 異步打開 異步都是回調 回調嵌套回調<br><code>fs.openSync(path,flags[,mode])</code><br>同步打開</p> <p>文件標記(flags): <a href="http://nodejs.cn/api/fs.html#fs_fs_open_path_flags_mode_callback" rel="nofollow noreferrer">http://nodejs.cn/api/fs.html#fs_fs_open_path_flags_mode_callback</a></p> <p>1、同步打開文件</p>node
//1\. 引入模塊 let fs = require('fs'); //2.打開文件 同步 var fd=fs.openSync('1.txt', 'w'); //3.寫入內容 fs.writeFileSync(fd,"hello world!"); //4\. 保存並關閉 fs.closeSync(fd);
<p>2、異步打開文件</p>git
//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; } })
<p>[](<a href="https://github.com/AnsonZnl/StudyNodeJS/blob/master/%E8%AF%BE%E7%A8%8B%E7%AC%94%E8%AE%B0/%E8%AF%BE%E6%97%B630-%E8%AF%BE%E6%97%B634%E7%AC%94%E8%AE%B0.md#%E8%AF%BE%E6%97%B632)" rel="nofollow noreferrer">https://github.com/AnsonZnl/S...</a></p> <h3>使用文件流寫入</h3> <p>文件流寫入: <a href="http://nodejs.cn/api/fs.html#fs_fs_createwritestream_path_options" rel="nofollow noreferrer">http://nodejs.cn/api/fs.html#fs_fs_createwritestream_path_options</a></p>github
//同步操做 //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('我愛你,');
<p>[](<a href="https://github.com/AnsonZnl/StudyNodeJS/blob/master/%E8%AF%BE%E7%A8%8B%E7%AC%94%E8%AE%B0/%E8%AF%BE%E6%97%B630-%E8%AF%BE%E6%97%B634%E7%AC%94%E8%AE%B0.md#%E8%AF%BE%E6%97%B633)" rel="nofollow noreferrer">https://github.com/AnsonZnl/S...</a></p> <h3>讀寫文件:</h3> <p>文檔地址:<a href="http://nodejs.cn/api/fs.html#fs_fs_readfile_path_options_callback" rel="nofollow noreferrer">http://nodejs.cn/api/fs.html#fs_fs_readfile_path_options_callback</a><br>讀取文檔:</p>segmentfault
//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; } });
<p>[](<a href="https://github.com/AnsonZnl/StudyNodeJS/blob/master/%E8%AF%BE%E7%A8%8B%E7%AC%94%E8%AE%B0/%E8%AF%BE%E6%97%B630-%E8%AF%BE%E6%97%B634%E7%AC%94%E8%AE%B0.md#%E8%AF%BE%E6%97%B634)" rel="nofollow noreferrer">https://github.com/AnsonZnl/S...</a></p> <p><strong>讀取視頻:</strong></p>api
//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('文件流傳輸完成')
<p>參考:<a href="https://www.jb51.net/article/133553.htm" rel="nofollow noreferrer">詳解NodeJS文件系統fs</a><br>個人GitHub總結的<a href="https://github.com/AnsonZnl/StudyNodeJS" rel="nofollow noreferrer">NodeJS筆記</a></p>服務器