Node之文件的完整读写
文件的完整读写
文件的读写需要引入node核心模块fs
let fs=require('fs')
readFile(filename, [options], callback)异步读取文件
fs.readFile(filename, [options], callback)
在readFile方法中,使用三个参数,其中filename参数与callback参数为必须指定的参数,options参数为可选参数。filename参数用于指定读取文件的完整文件路径及文件名,options参数值为一个对象,在其中指定读取文件时需要使用的选项,在该参数值对象中可以使用flag属性指定对该文件采取什么操作,默认值为'r'(如果指定读取的文件不存在,则抛出异常)
options配置文件中flag(权限)可选值如下
- 'r':读取文件,如果文件不存在则抛出异常。
- 'r+':读取并写入文件,如果文件不存在则抛出异常。
- 'rs':以同步方式读取文件并通知操作系统忽略本地文件系统缓存,如果文件不存在则抛出异常。由于该属性值的使用将使操作系统忽略本地文件系统缓存机制,因此在操作网络文件系统时建议使用该属性值,但由于其对性能产生一定的负面影响,所以在其他场合下不建议使用。
- 'w':写入文件。如果文件不存在则创建该文件,如果该文件已存在则清空文件内容。
- 'wx':作用与'w'类似,但是以排他方式写入文件。
- 'w+':读取并写入文件。如果文件不存在则创建该文件,如果该文件已存在则清空文件内容。
- 'wx+':作用与'w+'类似,但是以排他方式打开文件。
- 'a':追加写入文件,如果文件不存在则创建该文件。
- 'ax':作用与'a'类似,但是以排他方式写入文件。
- 'a+':读取并追加写入文件,如果文件不存在则创建该文件。
- 'ax+':作用与'a+'类似,但是以排他方式打开文件。
在options参数值中,可使用encoding属性指定使用何种编码格式来读取该文件,可指定属性值为“utf8”、“ascii”与“base64”。callback参数用于文件读取完毕时执行的回调函数。
function (err, data) {
//
回调函数代码略
}
Node中采用错误优先的方式
在回调函数中使用两个参数,其中第一个参数值为读取文件操作失败时触发的错误对象,第二个参数值为读取到的文件内容。当在options参数值对象中使用encoding属性指定编码格式时,该参数值为将文件内容根据指定编码格式经过编码后的字符串,当不指定options参数或在options参数值对象中不使用encoding属性时,该参数值为一个存放了文件中原始二进制内容的缓存区对象、
使用同步方式读取文件readFileSync(fileName,[option]);
var data=fs.readFileSync(filename, [options])
使用异步方式写入文件writeFile(filename,data,[options],callback);
- filename:文件名
- data:需要写入的数据
option:options参数值为一个对象,参数如下
- flag属性:用于指定对该文件采取何种操作,默认值为'w'(文件不存在时创建该文件,文件已存在时重写该文件),可指定值及其含义与readFile方法中使用的options参数值中的flag属性的可指定值及其含义相同。
- mode属性:用于指定当文件被打开时对该文件的读写权限,默认值为0666(可读写)。该属性值及fs模块中的各方法中的mode参数值的指定方法均如下所示:使用4个数字组成mode属性值或?mode参数值,其中第一个数字必须是0,第二个
数字用于规定文件或目录所有者的权限,第三个数字用于规定文件或目录所有者所属用户组的权限,第四个数字规定其他人的权限。可以设定的数字如下所示:
- 1:执行权限 - 2:写权限 - 4:读权限
- encoding属性:用于指定使用何种编码格式来写入该文件。可指定属性值为“utf8”、“ascii”与“base64”。当data参数值为一个Buffer对象时该属性值被忽略,使用默认编码格式utf8来执行文件的写入。
- callback:回调函数
fs.writeFile(filename,data,[options],callback)
使用同步方式写入文件writeFileSync(filename,data,[options])
fs.writeFileSync(filename,data,[options]
使用异步方法追加内容到文件底部appendFile(filename,data,[options],callback)
fs.appendFile(filename,data,[options],callback)
使用同步方法追加内容到文件底部appendFileSync(filename,data,[options],callback)
fs.appendFileSync(filename,data,[options])
从指定位置处开始读写文件
如何实现从指定位置处开始读写文件的处理。要实现这一处理,我们首先需要使用fs模块中的open方法或openSync方法打开文件。
异步打开文件open(filename, flags,[mode],callback)
fs.open(filename, flags,[mode],callback)
callback参数用于指定文件打开操作执行完毕时执行的回调函数
function (err, fd) {
//
回调函数代码略
}
回调函数使用两个参数,其中第一个参数值为打开文件操作失败时所触发的错误对象,第二个参数值为一个整数值,代表打开文件时返回的文件描述符(在Windows操作系统中,文件描述符亦称文件句柄)。
同步打开文件openSync(filename, flags,[mode])
var fd=fs.openSync(filename, flags,[mode])
从文件的指定位置处读取文件read(fd, buffer, offset, length, position, callback)
fs.read(fd, buffer, offset, length, position, callback)
- fd:必须为open方法所使用的回调函数中返回的文件描述符或openSync方法返回的文件描述符;
- buffer:buffer参数值为一个Buffer对象,用于指定将文件数据读取到哪个缓存区中;
- offset:用于指定向缓存区中写入数据时的开始写入位置(以字节为单位)
- length:用于指定从文件中读取的字节数
- position:用于指定读取文件时的开始位置(以字节为单位)
- callback:该回调函数使用三个参数,其中err参数值为读取文件操作失败时所触发的错误对象;bytesRead参数值为一个整数值,代表实际读取的字节数(由于文件的开始读取位置+指定读取的字节数可能大于文件长度,指定读取的字节数可能并不等于实际读取到的字节数);buffer参数值为被读取的缓存区对象。
从文件的指定位置处同步读取文件readSync(fd, buffer, offset, length, position)
参数与异步读取一致
从文件的指定处开始写入这些数据write(fd, buffer, offset, length, position, callback)
fs.write(fd, buffer, offset, length, position, callback)
callback函数使用三个参数,其中err参数值为写入文件操作失败时所触发的错误对象;written参数值为一个整数值,代表被写入的字节数;buffer参数值为一个Buffer对象,代表被读取的缓存区对象。
从文件的指定处开始写入这些数据writeSync(fd, buffer, offset, length, position )
参数与异步读取一致
关闭文件close(fd,[callback])
fs.close(fd,[callback])
同步关闭文件closeSync(fd)
fs.closeSync(fd)
将内存缓冲区中的剩余数据全部写入文件fsync(fd,[callback])
fs.fsync(fd,[callback])
将内存缓冲区中的剩余数据同步全部写入文件fsync(fd,[callback])
fs.fsyncSync(fd)
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。