node.js基本模块-fs

fs模块为node.js的内置模块,同时提供了同步和异步的方法。

简单回顾同步和异步的区别:

    1.异步在执行IO操作时,js代码不需要等待IO操作执行完毕,而是直接传入回调函数,待IO操作执行完毕,将其数值作为回调函数参数进行下一步操作。

    2.同步在执行IO操作时,需要等待函数的返回。

总体来说,同步代码容易理解,方便编写,但是执行过程中需要等待函数返回,因此会耗费时间。

读取文件:

异步读取文件:

a.文本文件的读取

node.js基本模块-fs_第1张图片
异步读文件

上述代码用于读取一个文件名为sample.txt的文件,值得注意的是,该文件的路径在当前目录,且需要声明编码格式为utf-8;

异步读取时,传入的回调函数接收两个参数,当正常读取时,err参数为null,data参数为读取到的String。当读取发生错误时,err参数代表一个错误对象,data为undefined。这也是Node.js标准的回调函数:第一个参数代表错误信息,第二个参数代表结果。后面我们还会经常编写这种回调函数。

因此,当文件读取出错时,利用参数err即可得出。

b.二进制文件的读取

上一篇文章我们介绍了Buffer对象,Buffer对象可以和String相互转换。


Buffer->String


String->Buffer

当读取二进制文件时,不传入文件编码时,回调函数的data参数将返回一个Buffer对象。在node.js中,Buffer对象就是一个包含零个或任意个字节的数组(注意和Array不同)。


node.js基本模块-fs_第2张图片
读取二进制文件

上述代码可读取一个文件名为sample.xxx(其后缀名可为二进制文件的后缀),二进制文件,那么对二进制文件,我们只需要知道:包含在ASCll及扩展 ASCII字符中编写的数据或程序指令的文件。计算机文件基本上分为二种:二进制文件和 ASCII(也称纯文本文件),图形文件及文字处理程序等计算机程序都属于二进制文件。

同步读取文件:

fs也提供相应的同步读取函数。同步读取的函数和异步函数相比,多了一个Sync后缀,并且不接收回调函数,函数直接返回结果。


同步读文件

同步读文件会直接返回结果,那么如何看文件是否读取出错呢?


node.js基本模块-fs_第3张图片

需要用try...catch捕获该错误

写文件:

将数据写入文件是通过fs.writeFile()实现的。


node.js基本模块-fs_第4张图片
写文件

writeFile()的参数依次为文件名、数据和回调函数。如果传入的数据是String,默认按UTF-8编码写入文本文件,如果传入的参数是Buffer,则写入的是二进制文件。回调函数由于只关心成功与否,因此只需要一个err参数,当然写文件也有一个同步方法,叫writeFileSync(),其用法与同步读文件相似,在这里我们不多做讨论。

如果我们要获取文件大小,创建时间等信息,可以使用fs.stat(),它返回一个Stat对象,能告诉我们文件或目录的详细信息,stat()也有一个对应的同步函数statSync()。


node.js基本模块-fs_第5张图片
stat获取文件信息

在web开发中,我们通常选用异步代码。

你可能感兴趣的:(node.js基本模块-fs)