Nodejs fs模块

fs模块 =>>File System(文件系统)

一、什么是fs模块?
fs模块是⽂件操作模块。fs是 FileSystem的简写。它⽤来对⽂件,⽂件夹进⾏操作。
fs模块中操作⽂件(或者⽂件夹)的⽅法,⼤多都提供了两种选择:

  • 同步版本的:同步文件系统会阻塞程序的执行,也就是说,除非操作完毕,否则不会向下执行代码
  • 异步版本的:异步文件系统不会阻塞程序的执行,而是操作完成时,通过回调函数将结果返回,性能更好

二、fs的使用
1.文件的写入

  • 同步:
    (1)fs.openSync(path[, flags, mode])

    • path:要打开文件的路径
    • flags:打开文件要做的操作类型
      “r” 只读的
      “w” 可写的
    • mode:设置文件的操作权限,一般不传
    • 该方法会返回一个函数的描述符作为结果,我们可以通过改描述符对该文件进行各种操作

    (2)fs.writeSync(fd, buffer[, offset[, length[, position]]])

    • fd:文件的描述符,需要传入要写入的文件的描述符
    • buffe:要写入文件的内容 。offset 决定 buffer 中要被写入的部位, length 是整数,指定要写入的字节数,position 指定文件开头的偏移量(数据要被写入的位置)

    (3)fs.closeSync(fd)

    • fd:要关闭的文件的描述符
	const fs=require("fs");
	//打开文件
	var fd=fs.openSync("hello.txt","w");
	console.log(fd);  //打开成功,会返回文件的描述符作为结果
	//向文件中写入内容
	fs.writeSync(fd,"你好呀!!");
	//关闭文件
	fs.closeSync(fd);
	运行结果:
	"C:\Program Files\JetBrains\WebStorm 2018.2.4\bin\runnerw.exe" "C:\Program Files\nodejs\node.exe" C:\Users\ASUS\Desktop\node.js\04-fs.js
	3

	Process finished with exit code 0

效果图:
在这里插入图片描述

  • 异步
    (1)fs.open(path[, flags[, mode]], callback)

    • path:要打开文件的路径
    • flags:打开文件要做的操作类型
      “r” 只读的
      “w” 可写的
    • mode:设置文件的操作权限,一般不传
    • callback回调函数,结果通过其参数返回
    • 回调函数两个参数 err:错误对象,如果没有错误,则为null;fd:文件的描述符
    • 该方法无返回值

    (2)fs.write(fd, buffer[, offset[, length[, position]]], callback)

    • fd:文件的描述符,需要传入要写入的文件的描述符
    • buffe:要写入文件的内容 。offset 决定 buffer 中要被写入的部位, length 是整数,指定要写入的字节数,position 指定文件开头的偏移量(数据要被写入的位置)
    • callback:回调函数

    (3)fs.close(fd,callback)

    • fd:要关闭的文件的描述符
    • callback:回调函数
const fs=require("fs");
//打开文件
fs.open("hello.txt","w",function(err,fd){
    console.log(err,fd)
    if(!err){
        console.log(fd);
        //向文件中写入内容
        fs.write(fd,"这是异步的内容",function (err){
               if(!err) {
                    console.log("写入成功");
               }
        })
        //关闭文件
        fs.close(fd,function (){
            console.log("写入失败");
        }
        );
    }
});
运行结果:
"C:\Program Files\JetBrains\WebStorm 2018.2.4\bin\runnerw.exe" "C:\Program Files\nodejs\node.exe" C:\Users\ASUS\Desktop\node.js\04-fs.js
null 3
3
写入成功
关闭成功

效果图:
在这里插入图片描述

  • 简单文件的写入
    • fs.writeFile(file, data[, options], callback)

    • fs.writeFileSync(file, data[, options])
      file :要操作的文件路径,可以是绝对路径,也可以是相对路径
      data:要写入的数据
      options :选项,可以对写入进行一些设置
      在这里插入图片描述

      callback:当写入完成之后执行的函数

const fs=require("fs");
fs.writeFile("hello.txt","这是通过writeFile写入的内容",function (err){
    if(!err){
        console.log("写入成功")
    }
}
)
运行结果:
"C:\Program Files\JetBrains\WebStorm 2018.2.4\bin\runnerw.exe" "C:\Program Files\nodejs\node.exe" C:\Users\ASUS\Desktop\node.js\04-fs.js
写入成功

Process finished with exit code 0

效果图:
在这里插入图片描述

  • 流式文件写入
    同步、异步、简单文件写入都不适合大文件的写入,性能较差,容易导致内存溢出
const fs=require("fs");
//创建一个可写流
var ws=fs.createWriteStream("hello.txt");
//可以通过监听流的open和close事件来监听流的打开和关闭
ws.once("open",function (){
    console.log("流打开了!");
})
ws.once("close",function (){
    console.log("流关闭了!");
})
//通过ws向文件中输出内容,只要文件流在,就可以一直写入
ws.write("通过可写流写入文件的内容");
ws.write("通过可写流写入文件的内容");
ws.write("通过可写流写入文件的内容");
ws.end();//若用ws.close(),只能写入第一句

效果图:
在这里插入图片描述

+++在这里插入图片描述
2.文件的读取

  • 同步
  • 异步
  • 简单文件读取
    • fs.readFile(path[, options], callback)
    • fs.readFileSync(path[, options])
      • path:要读取的文件路径
      • options:读取的选项
      • callback:通过回调函数,将读取的结果返回
	const fs=require("fs");
	fs.readFile("hello.txt",(err,data)=>{
	    if(!err){
	        console.log(data.toString())
	    }
	});
	运行结果:
	通过可写流写入文件的内容通过可写流写入文件的内容通过可写流写入文件的内容
例:读取并写入一张图片
	const fs=require("fs");
	fs.readFile("123.jpg",(err,data)=>{
	    if(!err){
	        console.log(data)
	        fs.writeFile("456.png",data,(err)=>{
	            console.log("写入成功!");
	        })
	    }
	});

效果图:
在这里插入图片描述

  • 流式文件读取
    适用于一些较大的文件,可以分多次将文件读取到内存中
const fs=require("fs");
//创建一个可读流
var rs=fs.createReadStream("hello.txt");
//监听流的开启和关闭
rs.once("open",()=>{
    console.log("可读流打开了");
})
rs.once("close",()=>{
    console.log("可读流关闭了");
})
//如果要读取一个可读流中的数据,必须为可读流绑定一个data事件,data事件绑定完毕,它会自动开始读取数据
rs.on("data",(data)=>{
    console.log(data);
});
运行结果:
可读流打开了
<Buffer e9 80 9a e8 bf 87 e5 8f af e5 86 99 e6 b5 81 e5 86 99 e5 85 a5 e6 96 87 e4 bb b6 e7 9a 84 e5 86 85 e5 ae b9 e9 80 9a e8 bf 87 e5 8f af e5 86 99 e6 b5 ... 58 more bytes>
可读流关闭了

详情见http://api.nodejs.cn/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值