fs模块用于文件的读写等操作。该模块有以下方法:1.fs.stat():检测是文件还是目录constfs=require('fs');fs.stat('test.html',function(err,stats){if(err){console.log(err);}else{console.log('File:'+stats.isFile());//trueconsole.log('Directory:'+stats.isDirectory());//错误的}});2、fs.mkdir():创建目录接受以下参数:path:要创建目录的路径mode:目录权限(读写权限),默认0777callback:回调,传入异常参数errfs.mkdir('css',function(err){if(err){console.log(err);}else{console.log("创建成功");}});3、fs.writeFile():写入文件filename(String)文件名data(String|Buffer)要写入的内容,可以是string或buffer数据。options(Object)选项数组对象,包括:encoding(string)可选值,默认'utf8',当数据为buffer时,该值应该被忽略。·mode(Number)文件读写权限,默认值438·flag(String)默认值'w'callback{Function}回调,传递异常参数err。varstr="HelloNode.js";fs.writeFile('write.txt',str,'utf8',function(err){if(err){console.log(err);}else{console.log("创建成功");}});如果该文件不存在,则创建同名文件并写入数据。如果多次写入,后面写入的内容会覆盖前面写入的内容。4、fs.appendFile():追加文件的用法与writeFile相同,只是写入后不会覆盖之前的数据,而是追加到后面的数据。5.fs.readFile():读取文件回调函数中的数据包含读取的数据。fs.readFile('write.txt',function(err,data){if(err){console.log(err);}else{console.log(data.toString());}});6、fs.readdir():读取目录,获取目录下的文件和文件夹。fs.readdir('css',function(err,data){if(err){console.log(err);}else{console.log(data);}});但是这样只能得到一级目录7.fs.rename():重命名文件fs.rename('html/index.html','html/news.html',function(err){if(err){console.log(err);}else{console.log('namechangedsuccessful');}})这样就可以将index.html的文件名改为news.html。该方法也可以实现文件切割功能:fs.rename('html/css/basic.css','html/style.css',function(err){if(err){console.log(err);returnfalse;}console.log('剪切成功');})这样html/css/basic.css就可以剪切成html/style.css了。8.fs.redir():删除目录fs.rmdir('text',function(err){if(err){console.log(err);returnfalse;}console.log('删除目录成功');})这里的删除只能删除空目录。9.fs.unlink():删除文件fs.unlink('index.txt',function(err){if(err){console.log(err);returnfalse;}console.log('删除文件successful');})10.fs.createReadStream():以流方式读取数据。这种读取文件的方式是分块读取的。//创建一个可以读取的流,读取文件中的varreadStreaminput.txt=fs.createReadStream('input.txt');varstr='';/*保存数据*/varcount=0;/*Times*///触发数据事件,开始读取数据readStream.on('data',function(chunk){str+=chunk;count++;})//触发结束事件,读取完成readStream.on('end',function(chunk){console.log(count);console.log(str);})//读取失败readStream.on('error',function(err){console.log(err);})本次读取方法非常高效,适合读取大批量数据。如果读取的数据量不是很大,使用上面的readFile方法。11.fs.createWriteStream():以流的形式写入文件vardata='我从数据库中获取数据,我要将其保存到文件中\n';//创建一个可以写入的流,写入到文件output.txtvarwriterStream=fs.createWriteStream('output.txt');//开始写入数据writerStream.write(data,'utf8');//标记写入完成writerStream.end();//触发完成写入的finish事件writerStream.on('finish',function(){console.log('writingcomplete');})//失败writerStream.on('error',function(){console.log('写入失败');})同理,如果要写入的文件不存在,则创建文件,然后写入。12.Pipeline流读取pipeline提供了一种输出流到输入流的机制。通常我们习惯从一个流中获取数据,然后将数据传递给另一个流。//创建一个可读流,它是管道的输出varreaderStream=fs.createReadStream('input.txt');//创建一个可写流,它是管道的输入varwriterStream=fs.createWriteStream('output.txt');//流水线读写操作//读取input.txt文件内容并将内容写入output.txt文件readerStream.pipe(writerStream);console.log("程序执行完毕");
