详解nodejs 文本操作模块-fs模块(三)

2020-06-17 07:10:33易采站长站整理

});
}

//如果读取的数据量为0,则表示已经读取结束,则执行close方法,结束readFile方法,并返回数据
if (bytesRead === 0) {
return close();
}

//如果有值,则更改pos的值,也就是更改在read方法中,读取文件起始位置的值。
pos += bytesRead;
//如果pos的值,已经等于文件的长度size了,则表示当前文件已经读取结束了,则关闭文件
//否则,继续调用read方法,继续读取。
//如果size===0的话,有可能是fstat没有能正常的读取到size的值,就执行后面的
if (size !== 0) {
if (pos === size) close();
else read();
} else {
// unknown size, just read until we don't get bytes.
//猜测,这里可能是在某些系统下,无法获取到文件的字节数,所以添加的这个判断。
buffers.push(buffer.slice(0, bytesRead));
read();
}
}

function close() {
fs.close(fd, function(er) {
//当文件读取结束时,拼接读取到的数组,
if (size === 0) {
// collected the data into the buffers list.
buffer = Buffer.concat(buffers, pos);
} else if (pos < size) {
buffer = buffer.slice(0, pos);
}
//根据是否有encoding,做一次编码转换
if (encoding) buffer = buffer.toString(encoding);
//把最终的数据,传入readFile的回调函数中。
return callback(er, buffer);
});
}
};

OK,上面就是源码中,readFile的实现逻辑,源码中,有提到了判断encoding是否为当前支持的编码方式的地方。

在前面我也说了句,在使用readFile时,设置flag的值,其实是无用的(我本人的想法,也可能是我资历尚浅,没有碰到过这样的需求),但是不妨碍有些人为了测试或者好玩,对于readFile的时候,设置flag=“w+”的情况,当然这个时候,直接就报错来吧。

前面的是readFile的相关东西,下面继续看下写文件的呢,也就是writeFile的方法来。

使用方法


fs.writeFile(fileName,data,[options],callback);

其中:

fileName是表示您要操作的文件的地址,关于地址,请查看前面readFile方法时,注释的链接。

data,为需要写入的数据,可以直接是字符串,也可以是buffer数据。

options是读取文件时,所需要的参数,options是一个对象,它只包含三个参数:options = { encoding: “utf-8”, flag: ‘r’ ,mode:438},这里的三个参数,其中encoding和flag和前面readFile所指代的含义相同,而mode所指代的含义,表示当前文件的操作权限,这个和fs.wirte时是相同的,可以参考:文本操作模块-fs模块(二)。

callback是回调函数,当改文件读取成功时,执行该文件,并且callback方法支持两个参数: