nodeJs文件系統(fs)與流(stream)

<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)=&gt;{
       //2.1判斷是否出錯
       if(!err){
           //正確 2.2寫入文件
           fs.writeFile(fd, "今每天.....氣真好!", (err)=&gt;{
                //2.2.1 寫入成功
                if(!err){
                    console.log('寫入成功');
                }else{
                    throw err;
                }
                //2.3 關閉文件
                fs.close(fd, (err)=&gt;{
                    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', ()=&gt;{
    console.log('通道已經打開');
})

ws.once('close', ()=&gt;{
    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)=&gt;{
    //判斷是否成功
    if(!err){
        console.log(data);//
        // console.log(data.toString());
        //data 默認讀取的是二進制 使用toString() 方法轉換成
    }else{
        throw err;
    }
})

讀取圖片:

//3\. 讀取圖片
fs.readFile("source/psb.jpg",(err,data)=&gt;{
    //判斷是否成功
    if(!err){
        //寫入圖片
        fs.writeFile('img.jpg', data, (err)=&gt;{
            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)=&gt;{
    if(!err){
        // 寫入視頻
        fs.writeFile('nmx.mp4', data, (err)=&gt;{
            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>服務器

來源:https://segmentfault.com/a/1190000016952017異步

相關文章
相關標籤/搜索