fs模块
-
文件操作格式
- 同步操作格式
/* let fs = require("fs"); 引入系统模块 //打开文件 let fd = fs.openSync("要打开的文件路径","a") r: 只读 w: 覆盖写 如果文件不存在,则自动创建. a: 追加写 如果文件不存在,则自动创建. //写入 fs.writeSync(fd,"写的内容","设置编码格式"); */ //同步写入 let fs=require('fs'); let fd=fs.openSync('a.txt','a') fs.writeSync(fd,"这是写入的内容1111","utf8");
- 异步操作格式
/*异步操作格式: let fs = require("fs"); r: 只读 w: 覆盖写 如果文件不存在,则自动创建. a: 追加写 如果文件不存在,则自动创建. fs.open("要打开的文件","a",(err,fd)=>{ fs.write(fd,"写入内容",(err)=>{ //err写入成功或者失败提示 }) }) */ let fs=require('fs'); //打开文件 fs.open('b.txt','a',(err,fd)=>{ fs.write(fd,'我应该写点啥呢',(err)=>{ if(!err){ console.log("写入成功"); }else{ console.log("写入失败"); } }) }) + 简单操作格式 ```js //fs.writeFile(file,data[options],callback) //file 打开的文件 //data:写入的内容 //[options] 简单地设置 设置flag:'a' 设置编码格式 encoding:'utf8'; // r:只读状态 //w:覆盖写 //a:追加写 //callback:(err) err:返回错误提示信息 let fs=require('fs'); fs.writeFile('c.txt','你干哈,你干哈,你到底在干啥',{flag:'a',encoding:'utf8'},(err)=>{ if(!err){ console.log("写入成功"); }else{ console.log("写入失败"); } })
- 流式操作格式
//流式操作格式 /* //加载fs模块 let fs=require('fs'); fs.createWriteStream(file,[option]) file:打开一个可写的文件 option:设置{flags:'a'} //创建一个可写的流 let ws=fs.createWriteStream('打开一个可写的文件',{flags:a}) ws.write('写入内容'); ws.end() //写完之后关闭 */ let fs=require('fs'); let ws=fs.createWriteStream('d.txt',{flags:'a'}); ws.write('我要减肥a'); ws.write('我要变瘦'); ws.write('我要瘦到90斤'); ws.write('我必须减肥'); ws.write('我要少吃点');
-
可读文件和可写文件
//文件读取 let fs=require('fs'); fs.readFile('1.jpg',(err,data)=>{ if(!err){ //如果没有错误一定会走这儿 fs.writeFile('2.jpg',data,(err)=>{ if(!err){ console.log('成功') }else{ console.log('失败'); } }) } })
-
可读流和可写流的格式
//流类似于你再下载东西的时候 //如果文件很大 就会一点一点的下载 差不多相当于那个进度条 let fs=require('fs'); //创建一个可以读的流 let rs=fs.crearReadStream('可以读的文件'); //创建可以写的流 let ws=fs.createWriteStream('可以写的流的文件'); //如果要用到流写入文件,必须要绑定一个事件,通过事件触发流写入 //on是一个方法 rs.on('data',(data)=>{ ws.write(data);//绑定一个事件 data事件 触发了事件 可以写入内容 }) rs.on('end',()=>{ ws.end();//关闭 });
-
文件的读取
//fs.readdir(path,[options],callback) //path:要读取的文件 //[options]:设置(状态或者编码格式,一般不会设置,默认) //callback: //(err,files):err:返回错误信息 //files:返回文件信息 let fs=require('fs'); //引入核心模块 fs.readdir('test',(err,files)=>{ console.log(err); console.log(files); })
-
文件和目录的区分
/*fs.stat(path,callback) path:读取文件路径 callback(err,stats) err:返回错误信息 stats:读取文件状态 stats.isFile() //是否是一个文件 stats.isDirectort() //是否是一个目录(文件夹) 文件不存在不会自动创建 */ let fs=require('fs'); fs.stat('txt',(err,status)=>{ console.log(err);//null console.log(status); //Stats {dev: 1710438242, mode: 33206, nlink: 1, uid: 0, gid: 0, …} console.log(status.isFile());//true console.log(status.isDirectory())//false })
-
删除操作
- 文件删除
//fs.unlink只能删除文件 不能删除目录(文件夹) let fs=require('fs'); fs.unlink('d.txt',(err)=>{ if(!err){ console.log('删除成功') }else{ console.log('删除失败') } })
- 目录删除(文件夹删除)
//fs.rmdir不能删除文件 只能删除空目录(空的文件夹) //如果文件夹里有东西 不能删除 let fs=require('fs'); fs.rmdir('text',(err)=>{ if(!err){ console.log('删除成功') }else{ console.log('删除失败') } })
- 文件删除
-
重命名(覆盖或者剪切)
- fs.rename(oldPath,newPath,callback)
oldPath:旧的文件路径
newPath:新的文件路径
callback:(err) 返回错误的信息 - 覆盖
//fs.rename 重命名 将1.txt重命名为a.txt let fs=require('fs'); fs.rename('aa/1.txt','aa/a.txt',(err)=>{ if(!err){ console.log('修改成功'); }else{ console.log('修改失败') } })
- 剪切
//剪切 将a文件夹中的1.txt剪切到b文件夹中去 fs.rename('aa/a/1.txt','aa/b/1.txt',(err)=>{ if(!err){ console.log('修改成功'); }else{ console.log('修改失败') } })
- fs.rename(oldPath,newPath,callback)
-
创建目录
-
fs.mkdir(path[,option],callback)
path:文件路径地址
[option] :设置 {recursive:true}递归创建
callback:(err) 返回错误的信息 -
只能一层一层的创建
fs.mkdir('bb/cc/dd',(err)=>{ if(!err){ console.log('创建成功'); }else{ console.log('创建失败') } })
- 递归创建 可以一下创建多层
//fs.mkdir加上{recursive:true}参数后 可以一下创建多层 fs.mkdir('mm/nn/yy/ff',{recursive:true},(err)=>{ if(!err){ console.log('创建成功'); }else{ console.log('创建失败') } })
-