node中fs模块 - fs.open() fs.read() fs.write() fs.close()
var fs = require('fs') fs.open('./a.txt', 'a+', function(err, fd) {
// 打开文件后 创建缓冲区放置数据
var readBuf = Buffer.alloc(), // 读取多少字节
bufOffset = ,
readbufLength = readBuf.length,
filePosition = ; // 提供缓冲区的第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 = , // 待写入数据在缓冲区的起始位置
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(), // 读取多少字节
bufOffset = ,
readbufLength = readBuf.length,
filePosition = ; // 提供缓冲区的第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 = , // 待写入数据在缓冲区的起始位置
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进程退出后,操作系统会确保所有文件都被关闭
在实际应用程序中, 一旦打开一个文件,最后必须关闭它.
node中fs模块 - fs.open() fs.read() fs.write() fs.close()的更多相关文章
- Node中的模块系统
加载require var 自定义变量名称 = require('模块') 两个作用: 执行被加载模块的代码 得到被加载模块中的exports导出接口对象 导出exports node中是模块作用域, ...
- node 中第三方模块的加载过程原理
node 中第三方模块的加载过程原理 凡是第三方模块都必须通过 npm 来下载 使用的时候就可以通过require('包名') 的方式来进行加载才可以使用 不可能有任何一个第三方包和核心模块的名字是一 ...
- node中的模块
模块 编写稍大一点的程序时一般都会将代码模块化.在NodeJS中,一般将代码合理拆分到不同的JS文件中,每一个文件就是一个模块,而文件路径就是模块名. 在编写每个模块时,都有require.expor ...
- Node中的模块引入机制
1.如果模块在当前目录下,可以通过下面语句将模块引入进来,注意需要使用 "./"表示当前路径 const currency = require('./currency'); ←-- ...
- Node中导入模块require和import??
转自:https://blog.csdn.net/wxl1555/article/details/80852326 S6标准发布后,module成为标准,标准的使用是以export指令导出接口,以im ...
- node中glob模块
glob glob允许使用规则,从而获取对应规则匹配的文件 node的glob模块允许你使用 * 等符号,来写一个glob规则,像在shell里一样,获取匹配对应规则文件 安装 npm install ...
- 使用node中mysql模块连接本地数据库
连接数据库的方法迄今为止学了三种: cmd方式.可视化工具,今天记第三种----node端连接数据库. 一:mysql模块介绍与下载 1.mysql模块是node端专门连接数据库的第三方模块 2.下载 ...
- node中glob模块总结
参考文章: githup_glob node-glob学习 前言: 最近在学习webpack配置, 其中有一项glob配置入口文件, 来获取对应的文件名, 达到入口entry和output文 ...
- Node.js 文件系统fs模块
Node.js 文件系统封装在 fs 模块是中,它提供了文件的读取.写入.更名.删除.遍历目录.链接等POSIX 文件系统操作. 与其他模块不同的是,fs 模块中所有的操作都提供了异步的和 同步的两个 ...
- nodejs入门API之fs模块
fs模块下的类与FS常量 fs模块下的主要方法 fs的Promise API与FileHandle类 一.fs模块下的类 1.1 fs.Dir:表示目录流的类,由 fs.opendir().fs.op ...
随机推荐
- sql 坐标距离排序计算距离(转)
如果两个坐标的列是(x1,y1).(x2,y2),那么他们之间的距离:SQRT((X1-X2)*(X1-X2)+(Y1-Y2)*(Y1-Y2)) sql排序 SELECT * FROM m_store ...
- LeetCode No.73,74,75
No.73 SetZeroes 矩阵置零 题目 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 示例 输入: [ [1,1,1], [ ...
- [LC] 84. Largest Rectangle in Histogram
Given n non-negative integers representing the histogram's bar height where the width of each bar is ...
- 浏览器证书问题,chorm,ie,edge,safari都会去读系统证书,firefox例外
坑爹 没想过浏览器兼容的问题. 为系统安装用户证书后, firefox一直无法连接 提示 连接 www.httpsserver.com:8985 时发生错误. SSL 对等端无法协商出一个可接受的安全 ...
- C 语言高效编程与代码优化
译文链接:http://www.codeceo.com/article/c-high-performance-coding.html英文原文:Writing Efficient C and C Cod ...
- Archlinux系统运维
本文将针对Archlinux下的系统运维进行介绍. 内核相关 查看当前内核版本 123 uname -r------------------------------------------------ ...
- 使用JavaServer Faces技术的Web模块:hello1 example
该hello1应用程序是一个Web模块,它使用JavaServer Faces技术来显示问候语和响应.您可以使用文本编辑器查看应用程序文件,也可以使用NetBeans IDE. 此应用程序的源代码位于 ...
- DOS命令编译JAVA程序
上篇文章给大家写了怎么安装JDK配置,现在这篇文章我们就来学习下怎么在DOS命令下编译JAVA程序,以后没编译器都可以直接编译啦(嘻嘻!) 我这里就用永远的 “Hello wrold!”来演示下吧. ...
- 微软Project Oxford帮助开发人员创建更智能的应用
Oxford帮助开发人员创建更智能的应用" title="微软Project Oxford帮助开发人员创建更智能的应用"> 假设你是一名对关于健身的应用充满奇思妙想 ...
- Logback 标准xml参考
强制: [强制]应用中不可直接使用日志系统(Log4j.Logback)中的 API,而应依赖使用日志框架SLF4J 中的 API,使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一.imp ...