1.同步与异步使用require('fs')加载fs模块。模块中的所有方法都有两种形式:同步和异步。异步方法中回调函数的第一个参数总是留给异常参数(exception),如果方法成功完成则为null或undefined。异步写demo:有回调函数。varfs=require('fs');//加载fs模块fs.unlink('/tmp/shiyanlou',function(err){if(err){throwerr;}console.log('successfullydeleted/tmp/shiyanlou');});同步写demo:varfs=require('fs');fs.unlinkSync('/tmp/shiyanlou');//Sync表示是同步方法console.log('成功删除/tmp/shiyanlou');同步方法执行完返回结果后,就可以执行后续代码了。异步方法使用回调函数接收返回结果,可以立即执行后续代码。2.readFile读取文件fs.readFile(filename,[option],callback)方法读取文件。参数说明:filenameString文件名optionObject-encodingString|nulldefault=null-flagStringdefault='r'callbackFunctiondemo有一个文本文件text.txt,内容如下:lineonelinetwo和text.txt有一个readfilein同一个目录。js,内容如下readFile的回调函数接收两个参数,err为读取文件错误时触发的错误对象,data为从文件中读取的数据。varfs=require('fs');//importfsmodulefs.readFile('./test.txt',function(err,data){//读取文件失败/错误if(err){throwerr;}//读取文件成功console.log(data);});$nodereadfile.js运行结果//使用toString()fs.readFile('./test.txt',function(err,data){//读取文件失败/errorif(err){throwerr;}//成功读取文件console.log(data.toString());});Setutf-8encoding://设置编码格式fs.readFile('./test.txt','utf-8',function(err,data){//读取文件失败/错误if(err){throwerr;}//读取文件成功console.log('utf-8:',data.toString()); //直接用console.log(data);也});readFile同步写的时候没有回调函数:fs.readFileSync(filename,[options])。3.WriteFile写入文件使用fs.writeFile(filename,data,[options],callback)将内容写入文件。参数说明:filenameString文件名dataStringbufferoptionObject-encodingStringnulldefault='utf-8'-modeNumberdefault=438(八进制又名0666)-flagStringdefault='w'callbackFunctiondemovarfs=require('fs');//导入fs模块//写入文件内容(如果文件不存在,会创建一个文件)//写入时,会先清空文件fs.writeFile('./test2.txt','testtest',function(err){if(err){throwerr;}console.log('Saved.');//写入成功后读取testfs.readFile('./test2.txt','utf-8',function(err,data){if(err){throwerr;}console.log(data);});});因为默认的flag='w'是write,会清空文件,如果要追加,可以传一个flag参数,如下。varfs=require('fs');//导入fs模块//写入文件内容(如果文件不存在,会创建一个文件)//传递附加参数{'flag':'a'}fs.writeFile('./test2.txt','testtest',{'flag':'a'},function(err){if(err){throwerr;}console.log('Saved.');//成功进入后写读测试fs.readFile('./test2.txt','utf-8',function(err,data){if(err){throwerr;}console.log(data);});});标志传值,r代表读文件,w代表写文件,a代表追加。4.使用fs.read和fs.write读写文件。fs.read和fs.write的功能类似于fs.readFile和fs.writeFile(),但提供了更底层的操作。在实际应用中,经常会用到fs.readFile和fs.writeFile。使用fs.read和fs.write读写文件需要用fs.open打开文件,用fs.close关闭文件。1、fs.read()先引入fs.open。fs.open(path,flags,[mode],callback)方法用于打开文件供fs.read()读取。参数说明:pathfilepathflags打开文件的方式[mode]为文件的权限(可行参数,默认值为0666)callback回调函数flags取值及说明如下:r:读取文件,上报如果文件不存在则出错;r+:读写一个文件,如果文件不存在则报错;rs:同步读取一个文件,如果文件不存在则报错;rs+:同步读写文件,文件不存在报错;w:WriteFile,如果文件不存在则创建,如果存在则清空;wx:同w,但文件存在时会报错;w+:读写文件,文件不存在则创建,存在则清空;wx+:同w+,但文件存在时会报错;a:以append方式写入文件,文件不存在则创建;ax:同a,但文件存在时会报错;a+:读取并追加到文件,文件不存在则创建;ax+:同a+,但文件存在时会报错。fs.close(fd,[callback])用于关闭文件,fd是打开文件的文件描述符。fs.read(fd,buffer,offset,length,position,callback)接收6个参数。参数说明:fd文件描述符,必须接收fs.open()方法中回调函数返回的第二个参数。buffer是存储读取数据的Buffer对象。offset指定缓冲区中存储数据的起始位置。length指定要从文件中读取的数据的字节数。position指定文件中读取文件内容的起始位置。callback回调函数,参数如下-err用于抛出异常-bytesRead实际从文件中读取的字节数。-buffer要读取的缓冲区对象。demo:read.js内容如下varfs=require('fs');//导入fs模块//打开文件fs.open('./testread.txt','r',function(err,fd){if(err){throwerr;}console.log('打开文件成功.');varbuffer=newBuffer(255);//读取文件fs.read(fd,buffer,0,10,0,function(err,bytesRead,buffer){if(err){throwerr;}//打印出缓冲区中存储的数据console.log(bytesRead,buffer.slice(0,bytesRead).toString());//关闭文件fs.close(fd);});});运行结果2,fs.write()fs.read(fd,buffer,offset,length[,position],callback(err,bytesWritten,buffer))收到6个参数。参数说明:fd文件描述符,必须接收fs.open()方法中回调函数返回的第二个参数。buffer用于存放要写入的数据,buffer的大小最好是8的倍数,效率更高。offset缓冲区写入偏移量。length(整数)指定写入文件的数据字节数。position(整数)指定写入文件内容的起始位置。callback回调函数,参数如下-err用于抛出异常-bytesWritten从文件中读取实际的字节数。-buffer要读取的缓冲区对象。varfs=require('fs');//导入fs模块//打开文件fs.open('./testwrite.txt',`w`,function(err,fd){if(err){throwerr;}console.log('打开文件成功。');varbuffer=newBuffer('shiyanlou');//读取文件fs.write(fd,buffer,0,6,0,function(err,bytesWritten,buffer){if(err){throwerr;}console.log('writesuccess.');//打印出缓冲区中存储的数据console.log(bytesWritten,buffer.slice(0,bytesWritten).toString());//关闭文件fs.close(fd);});});结果如下:五、目录操作1、创建目录使用fs.mkdir(path,[mode],callback)创建目录,path为必填项创建的目录,[mode]为目录的权限(默认是0777),callback就是回调函数。demo:mkdir.js内容如下varfs=require('fs');//导入fs模块//创建newdir目录fs.mkdir('./newdir',function(err){if(err){throwerr;}console.log('makedirsuccess.');});要删除目录,可以使用fs.rmdir(path,callback);但只能删除空目录。2.读取目录使用fs.readdir(path,callback)读取文件目录。demo:readdir.js内容如下varfs=require('fs');//importfsmodulefs.readdir('./newdir',function(err,files){if(err){throwerr;}//files是一个数组//每个元素是文件或文件夹的名称这个目录console.log(files);});结果输出该目录下有哪些目录和文件。
