fs模块为node.js的内置模块,同时提供了同步和异步的方法。
简单回顾同步和异步的区别:
1.异步在执行IO操作时,js代码不需要等待IO操作执行完毕,而是直接传入回调函数,待IO操作执行完毕,将其数值作为回调函数参数进行下一步操作。
2.同步在执行IO操作时,需要等待函数的返回。
总体来说,同步代码容易理解,方便编写,但是执行过程中需要等待函数返回,因此会耗费时间。
读取文件:
异步读取文件:
a.文本文件的读取

上述代码用于读取一个文件名为sample.txt的文件,值得注意的是,该文件的路径在当前目录,且需要声明编码格式为utf-8;
异步读取时,传入的回调函数接收两个参数,当正常读取时,err参数为null,data参数为读取到的String。当读取发生错误时,err参数代表一个错误对象,data为undefined。这也是Node.js标准的回调函数:第一个参数代表错误信息,第二个参数代表结果。后面我们还会经常编写这种回调函数。
因此,当文件读取出错时,利用参数err即可得出。
b.二进制文件的读取
上一篇文章我们介绍了Buffer对象,Buffer对象可以和String相互转换。


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

上述代码可读取一个文件名为sample.xxx(其后缀名可为二进制文件的后缀),二进制文件,那么对二进制文件,我们只需要知道:包含在ASCll及扩展 ASCII字符中编写的数据或程序指令的文件。计算机文件基本上分为二种:二进制文件和 ASCII(也称纯文本文件),图形文件及文字处理程序等计算机程序都属于二进制文件。
同步读取文件:
fs也提供相应的同步读取函数。同步读取的函数和异步函数相比,多了一个Sync后缀,并且不接收回调函数,函数直接返回结果。

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

需要用try...catch捕获该错误
写文件:
将数据写入文件是通过fs.writeFile()实现的。

writeFile()的参数依次为文件名、数据和回调函数。如果传入的数据是String,默认按UTF-8编码写入文本文件,如果传入的参数是Buffer,则写入的是二进制文件。回调函数由于只关心成功与否,因此只需要一个err参数,当然写文件也有一个同步方法,叫writeFileSync(),其用法与同步读文件相似,在这里我们不多做讨论。
如果我们要获取文件大小,创建时间等信息,可以使用fs.stat(),它返回一个Stat对象,能告诉我们文件或目录的详细信息,stat()也有一个对应的同步函数statSync()。

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