Node.js文件操作方法汇总
Node.js和其他语言一样,也有文件操作。先不说node.js中的文件操作,其他语言的文件操作一般也都是有打开、关闭、读、写、文件信息、新建删除目录、删除文件、检测文件路径等。在node.js中也是一样,也都是这些功能,可能就是api与其他语言不太一样。
一、同步、异步打开关闭
/** *CreatedbyAdministratoron2016/3/21. */ varfs=require("fs"); //同步读fs.openSync=function(path,flags,mode) //模块fs.js文件中如上面定义的openSync函数3个参数 //.1.path文件路径 //2.flags打开文件的模式 //3.model设置文件访问模式 //fd文件描述 varfd=fs.openSync("data/openClose.txt",'w'); //fs.closeSync=function(fd) fs.closeSync(fd); //异步读写 //fs.open=function(path,flags,mode,callback_) //fs.close=function(fd,callback) fs.open("data/openColse1.txt",'w',function(err,fd){ if(!err) { fs.close(fd,function(){ console.log("closed"); }); } });
其中的flags其他语言也会有.其实主要分3部分r、w、a.和C中的差不多。
1.r——以只读方式打开文件,数据流的初始位置在文件开始
2.r+——以可读写方式打开文件,数据流的初始位置在文件开始
3.w——如果文件存在,则将文件长度清0,即该文件内容会丢失。如果不存在,则尝试创建它。数据流的初始位置在文件开始
4.w+——以可读写方式打开文件,如果文件不存在,则尝试创建它,如果文件存在,则将文件长度清0,即该文件内容会丢失。数据流的初始位置在文件开始
5.a——以只写方式打开文件,如果文件不存在,则尝试创建它,数据流的初始位置在文件末尾,随后的每次写操作都会将数据追加到文件后面。
6.a+——以可读写方式打开文件,如果文件不存在,则尝试创建它,数据流的初始位置在文件末尾,随后的每次写操作都会将数据追加到文件后面。
二、读写
1.简单文件读写
/** *CreatedbyAdministratoron2016/3/21. */ varfs=require('fs'); varconfig={ maxFiles:20, maxConnections:15, rootPath:"/webroot" }; varconfigTxt=JSON.stringify(config); varoptions={encoding:'utf8',flag:'w'}; //options定义字符串编码打开文件使用的模式标志的encoding、mode、flag属性可选 //异步 //fs.writeFile=function(path,data,options,callback_) //同步 //fs.writeFileSync=function(path,data,options) fs.writeFile('data/config.txt',configTxt,options,function(err){ if(err){ console.log("ConfigWriteFailed."); }else{ console.log("ConfigSaved."); readFile(); } }); functionreadFile() { varfs=require('fs'); varoptions={encoding:'utf8',flag:'r'}; //异步 //fs.readFile=function(path,options,callback_) //同步 //fs.readFileSync=function(path,options) fs.readFile('data/config.txt',options,function(err,data){ if(err){ console.log("FailedtoopenConfigFile."); }else{ console.log("ConfigLoaded."); varconfig=JSON.parse(data); console.log("MaxFiles:"+config.maxFiles); console.log("MaxConnections:"+config.maxConnections); console.log("RootPath:"+config.rootPath); } }); }
"C:\ProgramFiles(x86)\JetBrains\WebStorm11.0.3\bin\runnerw.exe"F:\nodejs\node.exeSimpleReadWrite.js ConfigSaved. ConfigLoaded. MaxFiles:20 MaxConnections:15 RootPath:/webroot Processfinishedwithexitcode0
2.同步读写
/** *CreatedbyAdministratoron2016/3/21. */ varfs=require('fs'); varveggieTray=['carrots','celery','olives']; fd=fs.openSync('data/veggie.txt','w'); while(veggieTray.length){ veggie=veggieTray.pop()+""; //系统api //fd文件描述第二个参数是被写入的String或Buffer //offset是第二个参数开始读的索引null是表示当前索引 //length写入的字节数null一直写到数据缓冲区末尾 //position指定在文件中开始写入的位置null文件当前位置 //fs.writeSync(fd,buffer,offset,length[,position]); //fs.writeSync(fd,string[,position[,encoding]]); //fs.writeSync=function(fd,buffer,offset,length,position) varbytes=fs.writeSync(fd,veggie,null,null); console.log("Wrote%s%dbytes",veggie,bytes); } fs.closeSync(fd); varfs=require('fs'); fd=fs.openSync('data/veggie.txt','r'); varveggies=""; do{ varbuf=newBuffer(5); buf.fill(); //fs.readSync=function(fd,buffer,offset,length,position) varbytes=fs.readSync(fd,buf,null,5); console.log("read%dbytes",bytes); veggies+=buf.toString(); }while(bytes>0); fs.closeSync(fd); console.log("Veggies:"+veggies);
"C:\ProgramFiles(x86)\JetBrains\WebStorm11.0.3\bin\runnerw.exe"F:\nodejs\node.exesyncReadWrite.js Wroteolives7bytes Wrotecelery7bytes Wrotecarrots8bytes read5bytes read5bytes read5bytes read5bytes read2bytes read0bytes Veggies:olivescelerycarrots Processfinishedwithexitcode0
3.异步读写和同步读写的参数差不多就是多了callback
/** *CreatedbyAdministratoron2016/3/21. */ varfs=require('fs'); varfruitBowl=['apple','orange','banana','grapes']; functionwriteFruit(fd){ if(fruitBowl.length){ varfruit=fruitBowl.pop()+""; //fs.write(fd,buffer,offset,length[,position],callback); //fs.write(fd,string[,position[,encoding]],callback); //fs.write=function(fd,buffer,offset,length,position,callback) fs.write(fd,fruit,null,null,function(err,bytes){ if(err){ console.log("FileWriteFailed."); }else{ console.log("Wrote:%s%dbytes",fruit,bytes); writeFruit(fd); } }); }else{ fs.close(fd); ayncRead(); } } fs.open('data/fruit.txt','w',function(err,fd){ writeFruit(fd); }); functionayncRead() { varfs=require('fs'); functionreadFruit(fd,fruits){ varbuf=newBuffer(5); buf.fill(); //fs.read=function(fd,buffer,offset,length,position,callback) fs.read(fd,buf,0,5,null,function(err,bytes,data){ if(bytes>0){ console.log("read%dbytes",bytes); fruits+=data; readFruit(fd,fruits); }else{ fs.close(fd); console.log("Fruits:%s",fruits); } }); } fs.open('data/fruit.txt','r',function(err,fd){ readFruit(fd,""); }); }
"C:\ProgramFiles(x86)\JetBrains\WebStorm11.0.3\bin\runnerw.exe"F:\nodejs\node.exeasyncReadWrite.js Wrote:grapes7bytes Wrote:banana7bytes Wrote:orange7bytes Wrote:apple6bytes read5bytes read5bytes read5bytes read5bytes read5bytes read2bytes Fruits:grapesbananaorangeapple Processfinishedwithexitcode0
4.流式读写
/** *CreatedbyAdministratoron2016/3/21. */ varfs=require('fs'); vargrains=['wheat','rice','oats']; varoptions={encoding:'utf8',flag:'w'}; //从下面的系统api可以看到createWriteStream就是创建了一个writable流 //fs.createWriteStream=function(path,options){ //returnnewWriteStream(path,options); //}; // //util.inherits(WriteStream,Writable); //fs.WriteStream=WriteStream; //functionWriteStream(path,options) varfileWriteStream=fs.createWriteStream("data/grains.txt",options); fileWriteStream.on("close",function(){ console.log("FileClosed."); //流式读 streamRead(); }); while(grains.length){ vardata=grains.pop()+""; fileWriteStream.write(data); console.log("Wrote:%s",data); } fileWriteStream.end(); //流式读 functionstreamRead() { varfs=require('fs'); varoptions={encoding:'utf8',flag:'r'}; //fs.createReadStream=function(path,options){ //returnnewReadStream(path,options); //}; // //util.inherits(ReadStream,Readable); //fs.ReadStream=ReadStream; // //functionReadStream(path,options) //createReadStream就是创建了一个readable流 varfileReadStream=fs.createReadStream("data/grains.txt",options); fileReadStream.on('data',function(chunk){ console.log('Grains:%s',chunk); console.log('Read%dbytesofdata.',chunk.length); }); fileReadStream.on("close",function(){ console.log("FileClosed."); }); }
"C:\ProgramFiles(x86)\JetBrains\WebStorm11.0.3\bin\runnerw.exe"F:\nodejs\node.exeStreamReadWrite.js Wrote:oats Wrote:rice Wrote:wheat FileClosed. Grains:oatsricewheat Read16bytesofdata. FileClosed. Processfinishedwithexitcode0
个人觉得像这些api用一用感受一下就ok了,遇到了会用就行了。