异步的形式总是将完成回调作为其最后一个参数。 传给完成回调的参数取决于具体方法,但第一个参数始终预留用于异常。 如果操作成功完成,则第一个参数将为 null 或 undefined。
1.读取文件操作(readFile)
举个例子(读取文件操作) 同步会先执行完 [尽量用异步]
const fs = require('fs')
fs.readFile('./30_readfile.js','utf8',(err,data)=>{if(err){throw err}else{//输出结果是一个Buffer的(因为没有toString或者在参数那里定义编码格式)
console.log(data);// console.log(data.toString());
}
})// 同步操作
const data = fs.readFileSync('./29_event_remove.js','utf8');
console.log(data); 2.写文件(writeFile)
//输出done const fs = require('fs')fs.writeFile('./text','this is text','utf8',err=>{if(err) throw err;console.log('done') })//输出done 使用了Buffer const fs = require('fs') const content = Buffer.from('this is text') fs.writeFile('./text',content,err=>{if(err) throw err;console.log('done') })
3.查看文件信息(stats)
const fs =require('fs')
fs.stat('./32_stat.js',(err,stats)=>{if(err){throw err}else{console.log(stats.isFile());console.log(stats.isDirectory());console.log(stats);}
})
运行结果:

4.重命名(rename)
const fs =require('fs')
fs.rename('./text','text.txt',err=>{if(err) throw errconsole.log('done!');
}) 5.unlink
const fs = require('fs')
fs.unlink('./text.txt',err=>{}); 6.读文件夹(readdir)
const fs = require('fs')
fs.readdir('./',(err,files)=>{if(err) throw errconsole.log(files);
}) 运行结果

7.创建一个文件夹(mkdir)
const fs =require('fs')
fs.mkdir('test',err=>{ }) 8.移除一个文件夹(rmdir)
const fs = require('fs')
fs.rmdir('./test',err=>{}); 9.监视(watch)[很有用,做本地构建相当方便]
const fs = require('fs')
fs.watch('./',{recursive:true
},(eventType,filename)=>{console.log(eventType,filename);
}); 10.readstream
//stream有方向的流 (数据) stream有两个条件按,一个是方向一个是数据 const fs = require('fs') const rs = fs.createReadStream('./39_readstream.js'); //读一点给一点,类似网速慢加载从上到下 rs.pipe(process.stdout);
11.writestream
const fs =require('fs')
const ws = fs.createWriteStream('./text.txt')
const tid = setInterval(()=>{const num = parseInt(Math.random()*10)console.log(num);if(num<8){ws.write(num + '')}else{clearInterval(tid)ws.end()}
},200)
ws.on('finish',()=>{console.log('done!');
}) 运行结果

12.回调地狱解决
方法一
const fs =require('fs')
const promisify = require('util').promisify;const read = promisify(fs.readFile)
read('./41_promisify.js').then(data=>{console.log(data.toString());}).catch(ex=>{console.log(ex);}) 运行结果

方法二
const fs =require('fs')
const promisify = require('util').promisify;const read = promisify(fs.readFile)
// read('./41_promisify.js').then(data=>{
// console.log(data.toString());// }).catch(ex=>{
// console.log(ex);// })
async function test(){try{const content= await read('./41_promisify.js')console.log(content.toString());}catch(ex){console.log(ex);}
}
test(); 运行结果跟上面一样