当前位置: 首页 > 后端技术 > Node.js

nodejs-fs模块

时间:2023-04-04 00:47:50 Node.js

本文收录在《nodeJS探索之路》本文所有习题已经放在https://github.com/webxiaoma/nodeJS-demos文件夹下前言fs模块是一个比较重要的模块在nodeJS中有,本文主要讲的是nodejs中fs模块的基础知识,目的是了解fs模块的大致功能。fs模块必须在使用前引入。本文同意用constfs=require('fs')导入。详细API请访问官网fs模块同步异步方法。fs模块中的方法一般有同步方法和异步方法,比如读取文件的异步方法:fs.readFile('./test.txt',(err,data)=>{if(err)throwerr;console.log(data)})syncmethodletSyncFile=fs.readFileSync('./test.txt','utf-8');cosnole.log(SyncFile);General同步方法在异步后面加了Sync方法名。文件处理1.读取文件内容fs.readFile(path[,options],callback)参数:path|<缓冲区>|<网址>|文件名或文件描述符。选项<对象>|<字符串>编码<字符串>|默认为空。flag默认为'r'。回调<函数>错误<错误>数据<字符串>|fs.readFile('./test.txt',function(err,data){if(err){throwerr;}console.log(data)console.log(data.toString())})2.写文件内容fs.writeFile(file,data[,options],callback)异步向文件写入数据,如果文件已经存在,则替换文件。文件<字符串>|<缓冲区>|<整数>文件名或文件描述符数据<字符串>|<缓冲区>|选项<对象>|<字符串>编码<字符串>|default='utf8'modedefault=0o666flagdefault='w'callbackfs.writeFile('./write.txt','test',err=>{if(err)throwerr;console.log("写入成功");fs.readFile('./write.txt','utf-8',(err,data)=>{if(err)throwerr;console.log('读取成功:'+data);})})3.删除文件内容fs.unlink(path,callback)path|<缓冲区>|callbackerrfs.unlink('./delete.txt',err=>{assert.ifError(err);console.log('删除文件:delete.txt')})4.追加文件内容fs.appendFile(file,data[,options],callback)如果要追加的文件不存在,创建文件file|<缓冲区>|文件名或文件描述符数据|<缓冲区>选项<对象>|<字符串>编码<字符串>|默认为'utf8'mode默认为0o666flag默认为'a'callbackerrfs.appendFile('./add.txt','appendedcontent','utf8',(err)=>{assert.ifError(err);console.log(fs.readFileSync('./add.txt','utf8'))})5.拦截文件内容在说拦截文件内容之前,我们要讲一个打开文件,读写文件内容的方法打开文件:fs.open读文件内容:fs.read写文件内容:fs.write关闭文件:fs.close它们和readFilewriteFile和writeFile的区别在于底层。fs.read和fs.write需要依赖fs.open打开文件获取文件句柄,然后根据文件句柄进行读写。其实我们还是用的比较多的readFile和writeFile。我们来看一个例子:fs.open('./open.txt','a+',(err,fd)=>{if(err)throwerr;console.log("Filetoopen");letreadBuffer=newBuffer.alloc(30);letwriteBuffer=newBuffer.from("添加内容")fs.write(fd,writeBuffer,0,writeBuffer.length,0,(err,bytesWritten,buffer)=>{if(err)throwerr;console.log(`写入成功,写入长度:${bytesWritten},写入内容:${buffer}`);//写入成功,写入长度:12,写入输入内容:添加内容fs.read(fd,readBuffer,0,30,0,(err,bytesRead,buffer)=>{if(err)throwerr;console.log(bytesRead)//17console.log(buffer.toString()));//最后添加内容//关闭fs.close(fd);})})})我们这里说的拦截文件内容的方法是fs.ftruncate(fd[,len],callback)fdlendefault=0callbackerrletfd=fs.openSync('open.txt','r+');fs.ftruncate(fd,5,(err)=>{断言。ifError(err);console.log("拦截到的内容是:"+fs.readFileSync('open.txt','utf-8'));//截取的内容是:lastfs.close(fd);});目录操作1.创建目录。如果文件已经存在,会报错fs.mkdir('./newdir',function(err){if(err)throwerrconsole.log("makedirsuccess")})2.读取目录fs。readdir('./newdir',(err,files)=>{if(err)throwerr;//files是一个数组console.log(Array.isArray(files))console.log("读取目录成功:"+files);})3.删除目录时删除目录,如果目录不为空,会报错fs.rmdir('./delete_dir',function(err){if(err)throwerr;console.log('deletedirsuccess')})读取文件的常用模式用于在创建文件时指定文件的权限,默认0666flag:'r'-以读取方式打开文件'r+'-以读取方式打开文件读写模式。'rs'-以同步模式打开并读取文件。指示操作系统忽略本地文件系统缓存。'rs+'-同步打开、读取和写入文件。//注意:这不是让fs.open进入同步模式的阻塞操作。如果需要同步模式,请使用fs.openSync()。'w'-以读模式打开文件,如果文件不存在则创建'wx'-与'w'模式相同,如果文件存在则返回失败'w+'-以读写模式打开文件,如果文件不存在则创建'wx+'-与'w+'模式相同,如果文件存在则返回失败'a'-以追加模式打开文件,如果文件不存在则创建'ax'-与'a'模式相同,如果文件存在则返回失败'a+'-以read-append模式打开文件,如果文件不存在,创建'ax+'-同'a+'模式,如果文件存在,返回失败结束详细API请访问节点官网