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

NodeJsfs(简单的文件系统操作)

时间:2023-04-04 01:29:36 Node.js

个人学习记录,仅供参考文件系统(FileSystem)文件系统简单来说就是通过Node使用文件系统来使用操作系统中的文件,需要先导入fs模块,fs是核心模块,直接导入而不下载constfs=require('fs');filewritingsynchronizationfilewrite代码是一条一条执行的,会阻塞打开文件的操作步骤fs.openSync(path,flags[,mode]);pathpathflagstoopenthefiletoopenthefiletodo类型ofr是只读的w是可写的,mode是可选的来设置文件的操作。设置权限一般不传返回值:该方法会返回一个文件描述符作为结果。我们可以使用这个描述符来控制各种文件。该操作将内容写入文件fs.writeSync(fd,string[,position[,encoding]]);fd文件的描述符需要传递要写入的文件的描述符字符串。要写入的内容按位置写入起始位置//可选编码写入的编码,默认utf-8//可选保存和关闭文件fs.closeSync(fd);fd关闭文件的描述符Example//引入文件系统constfs=require('fs');//打开文件varfd=fs.openSync('test.txt','w');//写入内容到文件fs.writeSync(fd,'回到十七');//关闭文件fs.closeSync(fd);异步写文件的代码会一起执行,不会阻塞打开文件的操作步骤fs.open(path,flags[,mode],callback);异步调用的方法,传递结果回调函数的参数返回的回调函数有两个参数:err错误对象,如果没有错误则为nullfd文件描述符writetothefilefs.write(fd,string[,position[,编码]],回调);关闭文件fs.close(fd,callback);example//引入fs模块constfs=require('fs');//打开文件fs.open('test.txt','w',function(err,fd){//判断是否有errorif(!err){//写入文件fs.write(fd,"这是异步写入的内容",function(err){if(!err){console.log('写入成功');}//关闭文件fs.close(fd,function(err){if(!err){console.log("文件已关闭");}});});}else{console.log(err);}});simplefilewritefs.writeFile(file,data[,options],callback);//异步fs.writeFileSync(file,data[,options]);//同步文件要操作的文件的路径data要写入的数据options选项,可以为写操作做一些设置(Optional)Operator(flag):rread-onlywwwriteableaappendcallbackcallbackfunction,当我们写完一个例子时执行的函数constfs=require('fs');fs.writeFile('test.txt','writeFile写入的内容',{flag:"a"},function(err){if(!err){console.log("写入成功");}});流式文件写入同步、异步、简单的文件写入都不适??合大文件的写入。性能较差,容易造成内存溢出,而流式文件写入会一点一点写入,不会造成内存溢出。文件系统模块varfs=require('fs');创建可写流fs.createWriteStream(path[,options]);可以创建可写流路径文件路径选项配置参数打开文件varws=fs.createWriteStream('hello3.txt');侦听器流可选ws.once("open",function(){console.log("streamopened");});ws.once("close",function(){console.log("流已关闭");});可以通过监听流的打开和关闭事件来监听流的打开和关闭事件传给对象,事件触发一次后自动失败,通过wsws.write("Content1writtentothefilethroughawritablestream");将内容输出到文件中ws.write("内容2通过可写流写入文件");ws.write("内容通过可写流3写入文件");ws.write("内容4通过可写流写入文件");ws.write("内容5通过可写流写入文件"thewritablestream");Closethestreamws.end();Fileread读取一个简单的文件fs.readFile(path[,options],callback);fs.readFileSync(path[,options]);path读取文件的路径optionsoptionstoreadcallback回调函数会通过回调函数读取接收到的内容返回err错误对象数据读取的数据会返回一个buffer例子varfs=require('fs');fs.readFile('0.jpg',function(err,data){if(!err){//console.log(data);//写入数据到文件fs.writeFile('hello.jpg',data,function(err){if(!err){console.log("文件写入成功");}})}});流式文件读取流式文件读取也适用于一些比较大的文件,文件可以多次读入内存绑定方法示例varfs=require('fs');//创建可读流varrs=fs.createReadStream('0.jpg');//创建一个可写流varws=fs.createWriteStream('test.jpg')//监听流打开和关闭rs.once('open',function(){console.log("可读流已打开");});rs.once('close',function(){console.log("可读流已关闭");//数据读取完成,关闭可写流ws.end();});ws.once('open',function(){console.log("Thewritablestreamisopened");});ws.once('close',function(){console.log("Thewritablestreamisclosed");});//如果要读取可读流中的数据,必须给可读流绑定一个数据事件,数据事件为bound完成后会自动开始读取数据rs.on("data",function(data){//console.log(data.length);//将读取到的数据写入可写流ws.write(data);});pipe方法示例官方文档varfs=require('fs');//创建可读流varrs=fs.createReadStream('0.jpg');//创建可写流Streamvarws=fs.createWriteStream('test.jpg')//监听流的打开和关闭rs.once('open',function(){console.log("可读流打开");});rs.once('close',function(){console.log("可读流被关闭");});ws.once('open',function(){console.log("可写流被打开");});ws.once('close',function(){console.log("可写流关闭");});//pipe可以直接将可读流的内容输出到可写流写入流中的rs.pipe(ws);检查文件是否存在的常用方法fs.existsSync(path);例子varisExists=fs.existsSync('test.jpg');控制台日志(isExists);获取文件状态fs.stat(path[,options],callback)fs.statSync(path[,options])会返回一个对象,这个对象保存了当前对象状态的相关信息示例官网fs.stat('test.jpg',function(err,stats){/***sizefilesize*isFile()是一个文件*isDirectory()是一个文件夹(目录)*/if(!err){console.log(stats.isDirectory());}});删除文件fs.unlink(path,callback)fs.unlinkSync(path)例子fs.unlinkSync("test.jpg");读取一个目录的目录结构fs.readdir(path[,options],callback)fs.readdirSync(path[,options])files是一个字符串数组,每个元素是一个文件夹或文件的名称示例fs.readdir('.',function(err,files){if(!err){console.log(files);}});截断文件fs.truncate(path[,len],callback)fs.truncateSync(path[,len])修改文件到指定大小Examplefs.truncateSync('test.txt',10);创建文件夹(目录)fs.mkdir(path[,mode],callback)fs.mkdirSync(path[,mode])示例fs.mkdirSync("test");删除目录fs.rmdir(path,callback)fs.rmdirSync(path)示例fs.rmdirSync("test");重命名文件夹fs.rename(oldPath,newPath,callback)fs.renameSync(oldPath,newPath)参数oldPath旧路径newPath新路径回调回调示例fs.rename('test1.jpg','test2.jpg',function(err){if(!err){console.log('修改成功');}});watch文件修改fs.watchFile(filename[,options],listener)参数filename监听文件名options配置选项官网默认5s可调intervallistener回调函数当文件改变时回调函数会在回调函数中执行有两个parameterscurr当前文件状态prev修改前文件状态这两个对象是stats对象示例官网fs.watchFile('test.txt',{interval:1000},function(curr,prev){console.log("文件大小修改前modification==>"+prev.size);console.log("修改后文件大小==>"+curr.size);});