博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
node中fs模块 - fs.open() fs.read() fs.write() fs.close()
阅读量:4510 次
发布时间:2019-06-08

本文共 3304 字,大约阅读时间需要 11 分钟。

var fs = require('fs')fs.open('./a.txt', 'a+', function(err, fd) {  // 打开文件后 创建缓冲区放置数据  var readBuf = Buffer.alloc(1024), // 读取多少字节      bufOffset = 0,      readbufLength = readBuf.length,      filePosition = 50;            // 提供缓冲区的第50个字节开始  // 读取文件  fs.read(fd, readBuf, bufOffset, readbufLength, filePosition, function(err, readBytes,buffer) {      console.log('err: '+err)      console.log('readBytes: '+readBytes) // 读入缓冲区的字节数      console.log('buffer: '+buffer)       // 读入缓冲区的内容    })  // 写入文件  var writeBuf = Buffer.from("我是要写入的内容;"),      bufPosition = 0, // 待写入数据在缓冲区的起始位置      writbufLength = writeBuf.length, // 待写入数据的长度      filePosition = null; // 从文件中的什么位置开始写入数据  fs.write(fd,writeBuf,bufPosition,writbufLength,filePosition,function(err,bytesWritten,buffer){    console.log(err);    console.log(bytesWritten);    console.log(buffer.toString());  })  // 关闭文件  fs.close(fd,function(){    console.log("操作完毕,关闭文件")  })})

下面对于上面代码进行分解:

 

一. 在读取或者处理文件之前,必须先使用fs.open()函数打开文件,然后使用文件描述符调用所提供的回调函数,稍后就可以用这个回调函数对打开的文件进行读写.

 

var fs = require('fs')fs.open('./a.txt', 'a+', function(err, fd) {  // 获取文件描述符})

 

fs.open(path, flags, callback)函数的参数:

  1. path: 文件路径

  2. flags: 标志位, 表明文件以何种模式打开, 标志位有: r 、 r+、 w、 w+、 a、 a+

  • r     -->  读取模式, 数据流的位置在文件的起始处;(必须保证文件存在)
  • r+   -->  读写模式,数据流的位置在文件的起始处;(必须保证文件存在)
  • w    -->  写入模式,  如果文件存在清零, 文件不存在, 会创建文件写入数据, 数据流的位置在文件的起始处;  
  • w+  -->  读写模式,  如果文件存在清零, 文件不存在, 会创建文件写入数据, 数据流的位置在文件的起始处;
  • a     --> 追加写入模式,   文件不存在会创建新的文件, 数据流的位置在文件的结尾处,此后的写操作都将数据追加到文件后面
  • a+   --> 读取和追加写入模式,   文件不存在会创建新的文件, 数据流的位置在文件的结尾处,此后的写操作都将数据追加到文件后面

  3. callback回调函数, 有两个参数, err, fd.  返回文件描述符

 

二. 文件一旦打开,对其进行读取操作, 在读取之前, 必须创建一个缓冲区来放置数据. 缓冲区被传递到充满文件数据的fs.read函数

 

var fs = require('fs')fs.open('./a.txt', 'r', function(err, fd) {  // 打开文件后 创建缓冲区放置数据  var readBuf = Buffer.alloc(1024), // 读取多少字节      bufOffset = 0,      readbufLength = readBuf.length,      filePosition = 50;            // 提供缓冲区的第50个字节开始  // 读取文件  fs.read(fd, readBuf, bufOffset, readbufLength, filePosition, function(err, readBytes,buffer) {      console.log('err: '+err)      console.log('readBytes: '+readBytes) // 读入缓冲区的字节数      console.log('buffer: '+buffer)       // 读入缓冲区的内容    })})

 

fs.open()成功打开文件后, 调用回调函数, 创建缓冲区(以上代码), 要求以所提供的缓冲区的第50个字节开始, 读取随后的1024个字节的数据.

fs.read()的回调函数,当下列三种情况之一发生时就会调用该回调函数:

  • 有错误发啥
  • 成功读取了数据
  • 没有数据可读

 当发生错误时, 回调函数通过第一个参数获取一个错误对象,否则该参数为null

 如果成功读取了数据,第二个参数(readBytes)获得读入缓冲区的字节数, 如果其值为0, 代表到达文件尾部

 

三. 写入文件, 通过向fs.write()函数传递一个包含数据的缓冲区, 可以向一个已打开的文件写入数据

 

var fs = require('fs')fs.open('./a.txt', 'a', function(err, fd) {  var writeBuf = Buffer.from("我是要写入的内容;"),      bufPosition = 0,           // 待写入数据在缓冲区的起始位置      writbufLength = writeBuf.length,  // 待写入数据的长度      filePosition = null;         // 从文件中的什么位置开始写入数据  fs.write(fd,writeBuf,bufPosition,writbufLength,filePosition,function(err,bytesWritten,buffer){    console.log(err);    console.log(bytesWritten);    console.log(buffer.toString());  })})

 

以上代码以追加模式打开文件, 向文件写入数据, 传递的缓冲区包括:

  • 准备写入缓冲区的数据
  • 待写入数据在缓冲区中的起始位置
  • 待写入数据的长度
  • 从文件中的什么位置开始写入数据
  • 写入操作结束后被调用的回调函数

列举中, 向文件中写入数据的起始位置是null, 表明写入操作将从当前文件的游标处开始. 由于是以追加模式打开文件的, 因此此时的文件游标位于文件的结尾处.

四. 关闭文件

var fs = require('fs')fs.open('./a.txt', 'a+', function(err, fd) {  // 关闭文件  fs.close(fd,function(){    console.log("操作完毕,关闭文件")  })})

 

  当node进程退出后,操作系统会确保所有文件都被关闭

 在实际应用程序中, 一旦打开一个文件,最后必须关闭它.

  

转载于:https://www.cnblogs.com/liangyy/p/10606572.html

你可能感兴趣的文章
中间件
查看>>
Bytom移动端钱包SDK开发基础
查看>>
大龄恐惧症 (zz)
查看>>
MySQL数据分组GROUP BY 和HAVING
查看>>
vim配置成c++IDE
查看>>
iOS开发中APP之间传递信息1--URL Schema(应用程序间互相启动)
查看>>
MyEclipse持续性开发教程:用JPA和Spring管理数据(一)
查看>>
二级域名共享cookiee 无法删除
查看>>
Luogu 3620 数据备份 - Set
查看>>
03 python 初学(字符格式化输出)
查看>>
百度地图实现普通地图、定位、周边搜索功能
查看>>
OpenCV 学习笔记 02 处理文件、摄像头和图形用户界面
查看>>
图论(网络流):COGS 410. [NOI2009] 植物大战僵尸
查看>>
原理图和PCB元件对应查找--Altium Designer
查看>>
c#鼠标移动到Button 改变颜色
查看>>
利用node搭建本地服务器
查看>>
python pickle命令执行与marshal 任意代码执行
查看>>
Elasticsearch 2.3 java api
查看>>
golang写入csv
查看>>
基础2
查看>>