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异步

相关文章
相关标签/搜索