node.js基本模块-fs

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相互转换。


Buffer->String


String->Buffer

当读取二进制文件时,不传入文件编码时,回调函数的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()。


stat获取文件信息

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Node.js 常用工具 util 是一个Node.js 核心模块,提供常用函数的集合,用于弥补核心JavaScr...
    FTOLsXD阅读 546评论 0 2
  • 文件系统模块是一个封装了标准的 POSIX 文件 I/O 操作的集合。通过require('fs')使用这个模块。...
    保川阅读 808评论 0 0
  • Node.js是目前非常火热的技术,但是它的诞生经历却很奇特。 众所周知,在Netscape设计出JavaScri...
    w_zhuan阅读 3,642评论 2 41
  • 内容来自《Node.js开发指南》 核心模块是 Node.js 的心脏,它由一些精简而高效的库组成,为 Node....
    angelwgh阅读 926评论 0 1
  • 这真的是一篇跨年的文章了,好长,一边看,一边跟着敲代码验证,那么,问题来了,你和谁一起跨年了(机智脸)? 在Nod...
    范小饭_阅读 1,289评论 3 8