面试官:谈谈你对Node中Fs模块的理解?常用的方法有哪些?转载本文请联系JS每日一问公众号。1、什么是fs(文件系统)?该模块提供读写本地文件的能力。它基本上是一个简单的POSIX文件操作命令包。可以说,所有对文件的操作都是通过fs核心模块实现的。导入模块如下:constfs=require('fs');本模块为所有文件系统操作提供了异步(不带sync后缀)和同步(带sync后缀)两种操作方式,供开发者选择2.文件知识与计算机中文件相关的知识:权限位模式标志位文件descriptionasfdpermissionbitmode为文件所有者、文件所属组和其他用户分配权限。类型分为读、写、执行,权限位为4、2、1,如果没有权限则为0,如在linux中查看文件权限位:drwxr-xr-x1PandaShen1971210Jun2814:41core-rw-r--r--1PandaShen197121293Jun2317:44index.md开头的前十位,d是文件夹,-是文件,后九位代表当前用户的权限数字,用户组属于和其他用户。除以三位数字,分别代表读(r)、写(w)、执行(x),-表示没有当前位对应的权限标识位标志代表文件的操作方式,如可读、可写、既可读又可写等,如下表所示:符号含义r读取文件,如果文件不存在则抛出异常。r+读写一个文件,如果文件不存在则抛出异常。rs读写文件,指示操作系统绕过本地文件系统缓存。w写入文件。如果该文件不存在,将创建它。如果存在,它将被清除并写入。wx写入文件,以独占方式打开。w+读写文件,文件不存在则创建,存在则清空后再写入。wx+和w+类似,都是独占打开的。a追加写入,如果文件不存在,则创建文件。ax类似于a,独占打开。a+读取并追加写入,如果不存在则创建。ax+类似于a+,独占打开。文件描述为fd。操作系统为每个打开的文件分配一个称为文件描述符的数字标识符。文件操作使用这些文件描述符来识别和跟踪每个特定文件。Windows系统使用不同但相似的概念。跟踪资源的机制。为了方便用户,NodeJS抽象了不同操作系统之间的差异,并为所有打开的文件分配了数字文件描述符。在NodeJS中,每操作一次文件,文件描述符就会递增,文件描述符一般从3开始,因为前面有0、1、2三个特殊描述符,代表process.stdin(标准输入),process.stdout(标准输出)和process.stderr(错误输出)分别。三、方法下面展开fs模块的常用方法:filereadfilewritefileappendwritefilecopycreatedirectoryfilereadfs.readFileSync同步读取,参数如下:第一个参数是路径或文件描述符读取文件第二个参数为options,默认为null,包括encoding(编码,默认为null)和flag(标识位,默认为r),也可以直接传入编码结果返回文件内容constfs=require("fs");letbuf=fs.readFileSync("1.txt");letdata=fs.readFileSync("1.txt","utf8");console.log(buf);//console.log(data);//hellofs.readFile异步读取方法readFile和readFileSync一样前两个参数,最后一个参数是回调函数,有两个参数err(错误)和data(数据)函数中,该方法没有返回值,回调函数执行constfs=require("fs");fs.readFile("1.txt","utf8",(err,data)=>{if(!err){成功读取文件(data)后的console.log;//你好}});文件被写入writeFileSync同步写入,有三个参数:第一个参数是写入文件的路径或文件描述符;第二个参数为要写入的数据,类型为String或Buffer;第三个参数是options,默认值为null。其中有encoding(编码,默认为utf8)、flag(标识位,默认为w)和mode(许可位,默认为0o666),encoding也可以直接传入constfs=require("fs");fs.writeFileSync("2.txt","Helloworld");letdata=fs.readFileSync("2.txt","utf8");console.log(data);//HelloworldwriteFile是异步写入的,writeFile同理writeFileSync的前三个参数,最后一个参数是一个回调函数,函数中有一个参数err(error),回调函数执行constfs=require("fs");fs.writeFile("2.txt""Helloworld"文件写入数据成功后,err=>{if(!err){fs.readFile("2.txt","utf8",(err,data)=>{console.log(数据);//Helloworld});}});appendFileSync的参数如下:第一个参数是写入文件的路径或文件描述符;第二个参数为要写入的数据,类型为String或Buffer;第三个参数是options,默认值为null,其中有encoding(编码,默认为utf8),flag(标识位,默认为a)和mode(权限位,默认为0o666),encoding也可以直接传入constfs=require("fs");fs.appendFileSync("3.txt","world");letdata=fs.readFileSync("3.txt","utf8");appendFile异步append写法appendFile同appendFileSync前三个参数,最后一个参数是回调函数,函数中有一个参数err(错误),回调函数在文件中Executeconstfs=require("fs");fs.appendFile("3.txt","world",err=>{if(!err){fs.readFile("3.txt","utf8",(err,data)=>{console.log(数据);//Helloworld});}});文件复制copyFileSync同步复制constfs=require("fs");fs.copyFileSync("3.txt","4.txt");letdata=fs.readFileSync("4.txt","utf8");console.log(data);//HelloworldcopyFile异步拷贝constfs=require(“fs”);fs。copyFile("3.txt","4.txt",()=>{fs.readFile("4.txt","utf8",(err,data)=>{console.log(data);//你好世界});});创建目录mkdirSync同步创建,参数为目录路径,无返回值。在创建目录的过程中,必须保证传递的路径前面的所有文件和目录都存在,否则会抛出异常"a/b/c")mkdir是异步创建的,第二个参数是回调函数fs.mkdir("a/b/c",err=>{if(!err)console.log("创建成功");});参考http://nodejs.cn/api/fs.htmlhttps://segmentfault.com/a/1190000019913303