node是服务器端语言,所有它是有文件读写系统的,fs模块就是node提供的文件读写系统,在fs文件系统中均有同步,异步版本
异步版本就是最后一个参数为回调函数,回调函数第一个信息为错误信息(error),两种方法建议使用异步,因为异步速度快,性能高,没有堵塞,且能在错误时抛出错误
文件系统基础操作
文件读取
异步读取
let fs = require('fs');//引入fs文件系统
fs.readFile('./new.txt',(err,data)=>{//通过fs.readFile('文件地址',(错误信息,文件内容)=>{}回调函数)方法读取文件
if (err) {
throw err //如果错误,抛出错误
}else{
console.log(data) //没有错误,打印文件内容,打印的是计算机码。可以通过toString()转化
}
})
同步读取
let fs = require('fs');
let data = fs.readFileSync('./new.txt');//文件内容赋值给data
console.log(data.toString());
文件写入
如果不存在该文件,则新创建一个,若存在,则覆盖原有文件
异步写入
let fs = require('fs');
let data = "console.log(Hello word !)"; //定义一个内容方便插入,无关紧要,可以直接在方法里插入
fs.writeFile('./demo.js',data,(err)=>{ //通过fs.writeFile(‘写入的地址’,写入的内容,(错误信息)=>{}回调函数)方法写入数据
if (err) {
throw err
}else{
console.log("文件写入成功") //文件写入成功则打印
}
})
同步写入
let fs = require('fs');
fs.writeFileSync('./demo.js','hello node.js!');
查看文件信息
异步写法
let fs = require('fs');
fs.stat('./demo.js',(err,state)=>{//通过fs.stat()方法读取文件信息fs.stat('文件地址',(错误信息,文件信息)=>{}回调函数)
if (err) {
throw err
}else{
console.log(state)
}
})
同步写法
let fs = require('fs');
let state = fs.statSync('./demo.js')
console.log(state)
state类中拥有一些方法
let fs = require('fs');
fs.stat('./demo.js',(err,state)=>{//通过fs.stat()方法读取文件信息fs.stat('文件地址',(错误信息,文件信息)=>{}回调函数)
if (err) {
throw err
}else{
console.log(state.isFile());//判断是不是文件,是返回true
console.log(state.isDirectory());//判断是不是目录,是返回true
}
})
删除文件
let fs = require('fs');
fs.unlink('./demo.js',(err)=>{//通过fs.unlink('文件地址',回调函数)方法
if (err) {
throw err
}else{
console.log("删除成功")
}
})
文件夹目录操作
查看文件夹
let fs = require('fs');
fs.readdir('./demo',(err,dataDir)=>{//查看文件夹,目录
if (err) {
throw err
}else{
console.log(dataDir)
}
});
删除空文件夹
fs.rmdir('/Users/xmly/Desktop/node/demo',(err)=>{//通过rmdir()方法
if (err) {
throw err
}else{
console.log('删除目录成功')
}
})
读取流写入流
什么是流?
所有互联网传输方式都是流,流是一种有起点有重点的数据传输方式
读取流
let fs = require('fs');
let stream = fs.createReadStream('./data.txt'); //引入读取流
stream.on('data',(value)=>{
console.log(value)
});
stream.on('error',(error)=>{
console.log(error)
})
写入流
let fs = require('fs');
let write = fs.createWriteStream('./new.txt');//引入写入流模板
write.write('i');
write.write('am');
write.write('boy');//分段写入内容
write.end();//表示写入结束
write.on('finish',()=>{
console.log('写入成功')//write完成
});
write.on('error',(error)=>{
console.log(error)//出错时打印
})