资讯专栏INFORMATION COLUMN

nodeJs文件系统(fs)与流(stream)

0x584a / 863人阅读

摘要:异步文件系统不会阻塞程序的执行,而是在操作完成时,通过回调函数将结果返回。

文件系统(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笔记

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/99102.html

相关文章

  • Node.js知识点详解(三)缓冲与流模块

    摘要:缓冲模块起初就是为浏览器而设计的,所以能很好的处理编码的字符串,但不能很好的处理二进制数据。有如下三个主要的流标准输入标准输出标准错误可读流如果说,缓冲区是处理原始数据的方式的话,那么流通常是移动数据的方式。该方法让可读流继续触发事件。 缓冲(buffer)模块 js起初就是为浏览器而设计的,所以能很好的处理unicode编码的字符串,但不能很好的处理二进制数据。这是Node.js的...

    plus2047 评论0 收藏0
  • [转]nodejs Stream使用手册

    摘要:方法也可以接收一个参数表示数据请求着请求的数据大小,但是可读流可以根据需要忽略这个参数。读取数据大部分情况下我们只要简单的使用方法将可读流的数据重定向到另外形式的流,但是在某些情况下也许直接从可读流中读取数据更有用。 介绍本文介绍了使用 node.js streams 开发程序的基本方法。 We should have some ways of connecting programs ...

    luffyZh 评论0 收藏0
  • Gulp使用入门

    摘要:是一款流式构建系统,如果说是基于任务执行器,就是基于的文件流任务执行器,比起有如下特点使用方便通过代码优于配置的策略,可以让简单的任务简单,复杂的任务更可管理。 作者:Jogis原文链接:https://github.com/yesvods/Blog/issues/1转载请注明原文链接以及作者信息 showImg(http://itanguo.cn/wp-content/uploads...

    ShevaKuilin 评论0 收藏0
  • 深入nodejs中流(stream)的理解

    摘要:等文件一旦打开,立刻执行写入操作发射一个缓存区清空的事件自定义可写流为了实现可写流,我们需要使用流模块中的构造函数。 流的基本概念及理解 流是一种数据传输手段,是有顺序的,有起点和终点,比如你要把数据从一个地方传到另外一个地方流非常重要,gulp,webpack,HTTP里的请求和响应,http里的socket都是流,包括后面压缩,加密等流为什么这么好用还这么重要呢? 因为有时候我...

    tianyu 评论0 收藏0
  • Node.js基础 23456:全局对象,回调函数,模块,事件,读写文件(同步,异步)

    摘要:它们的作用域只在模块内,详见文档回调函数与一样,如模块一个大项目一定是分成一个个模块的,一般来说,一个文件就是一个模块。这些对象有一个函数,用于将一个或多个函数绑定到命名事件上。用于注册监听器,用于触发事件。 全局对象 类似的,在浏览器中有window全局变量在所有模块中都可使用。不需要引用等。全局变量如console,setTimeout,require()等 全局变量在所有模块中都...

    RobinTang 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<