最新文档请查看仓库https://github.com/wangduandu...1.FileSystem中所有的文件操作都提供了同步和异步的方式。这个注意只是异步API异步方法的最后一个参数是回调函数。回调函数的第一个参数通常是一个错误对象。如果没有出现参数,则第一个参数可能为空或未定义。同步函数可以使用trycatch来捕获异常。多个异步函数在同一层执行,无法保证顺序。最好将一个函数放在另一个函数的回调函数中执行。一旦这个回调的嵌套层次太深,就会造成回调地狱。一般情况下,不建议使用同步fs方法,因为同步方法会阻塞其他事情,直到fs方法完成。1.1.文件路径filepaths目前支持4种协议stringBufferURL以file开头的对象:字符串路径将被解释为utf-8格式,可以使用相对路径和绝对路径。相对路径为当前工作路径,可以从process.cwd()获取当前工作路径。1.2.文件描述符操作系统会限制文件描述符的数量。忘记关闭文件可能会导致内存泄漏或程序崩溃。任何文件描述符都支持写操作。如果文件描述符的类型是文件,则不会自动关闭写操作。从文件的开头开始,之后不覆盖任何内容。例如:文件的内容是HelloWorld,如果你写的是'Aloha',那么文件的内容就是AlohaWorld,而不是'Aloha'。1.3.线程池使用了fs的所有API,除了那些同步的API和fs.FSWatcher(),基本上都是用libuv的线程池。在某些应用程序中,这会导致性能非常差。libuv的线程池有固定大小,默认只有4个。您可以通过设置环境变量UV_THREADPOOL_SIZE来增加libuv中的线程数。1.4.类:fs.Dirent判断文件类型当调用fs.readdir()或fs.readdirSync()时,参数withFileTypes为true,则返回结果为fs.Dirent对象,不是字符串或Buffersdirent方法dirent.isBlockDevice()dirent.isCharacterDevice()dirent.isDirectory()dirent.isFIFO()dirent.isFile()dirent.isSocket()dirent.isSymbolicLink()dirent.name1.5。类:fs.FSWatcher文件变化监控来自fs.watch()Eventchangecloseerorwatcher.close()注意:有些系统可能不会返回文件名。如果编码参数为buffer,则文件名以buffer形式返回,默认文件名是utf-8格式的字符串。fs.watch('./tmp',{encoding:'buffer'},(eventType,filename)=>{if(filename){console.log(filename);//打印:}});1.6。类:fs.ReadStream可读流来自fs.createReadStream()Eventcloseopenready第一个触发是在open事件readStream.bytesReadreadStream.pathreadStream.pending1.7之后。类:fs.Stats从fs.stat()、fs.lstat()和fs.fstat()及其同步副本获取文件信息。stats.isBlockDevice()stats.isCharacterDevice()stats.isDirectory()stats.isFIFO()stats.isFile()stats.isSocket()stats.isSymbolicLink()Stats{dev:2114,ino:48064969,mode:33188,nlink:1,uid:85,gid:100,rdev:0,size:527,blksize:4096,blocks:8,atimeMs:1318289051000.1,mtimeMs:1318289051000.1,ctimeMs:1318289051000.1,birthtimeMs:1318289051000.1,atime:Mon,10Oct20111.8。类:fs.WriteStream可写流EventcloseopenreadywriteStream.bytesWrittenwriteStream.pathwriteStream.pending2。常用方法测试访问权限测试fs.access(path[,mode],callback)测试某个路径是否可以访问。不建议在fs.open()、fs.readFile()或fs.writeFile()之前调用fs.access检查测试路径是否存在。不推荐fs.exists(path,callback)。fs.open(),fs在调用.readFile()或fs.writeFile()之前,调用fs.exists检查文件是否存在。流操作创建可读流fs.createReadStream(path[,options])创建可写流fs.createWriteStream(path[,options]])文件夹操作创建文件夹fs.mkdir(path[,options],callback)删除目录fs.rmdir(path,callback)创建临时文件夹fs.mkdtemp(prefix[,options],callback)读取文件夹fs.readdir(path[,options],callback)文件操作打开文件fs.open(path[,flags[,mode]],callback)读取文件fs.read(fd,buffer,offset,length,position,callback))读取文件fs.readFile(path[,options],callback)重命名文件fs.rename(oldPath,newPath,callback)read文件信息fs.stat(path[,options],callback)删除文件fs.unlink(path,callback)停止监听文件fs.unwatchFile(filename[,listener])修改时间fs.utimes(path,atime,mtime,callback)监控文件变化fs.watch(filename,options)关闭文件fs.close(fd,callback)追加文件fs.appendFile(path,data[,options],callback)改变文件模式fs.chmod(path,mode,callback)更改文件所有权fs.chown(path,uid,gid,callback)复制文件fs.copyFile(fs.copyFile(src,dest[,flags],callback))写入文件fs.write(fd,buffer[,offset[,length[,position]]],callback)写入文件fs.write(fd,string[,position[,encoding]],callback)writefilefs.writeFile(file,data[,options],callback)otherfsconstantsfs.constants注意fs.watch不是100%跨平台这样的因为它的递归参数只支持macOS和windows。fs.watch的底层通知机制在不同的平台上实现方式不同。如果底层不支持某个特性,那么fs.watch也不支持。另外,回调函数中的filename参数不保证一定存在。fs.watch()比fs.watchFile()更高效,所以尽可能使用前者。3.参考Node.jsfs