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了,遇到了会用就行了。