文件系统(File System)
基本概念
- 学习fs模块的API
- 使用fs模块前,需要通过 require(‘fs’) 引入
特点
- 提供同步异步两种选择
- 同步导致阻塞
- 异步操作完成通过回调返回结果
写入
同步
let fs = require('fs')
//同步打开文件
let fd = fs.openSync('text1.txt','w')
console.log(fd);
//写入内容
let str = 'hello!';
fs.writeFileSync(fd,str);
//退出文件
fs.closeSync(fd);
上图 ‘3’ 为文件id序号
异步
let fs = require('fs')
fs.open('text2.txt','w',(err,fd)=>{
fs.writeFile(fd,'hello2!',function(){
if(!err){
console.log('写入完成');
fs.close(fd,()=>{
console.log('文件关闭');
})
}else{
console.log(err);
}
})
})
console.log(123);
文件流写入
let fs = require('fs');
let ws = fs.createWriteStream('text3.txt');
//监听通道打开
ws.once('open',()=>{
console.log('通道打开');
ws.write('hello1');
ws.write('hello2');
ws.write('hello3');
//写入结束
ws.end();
})
//监听通道关闭
ws.once('close',()=>{
console.log('通道关闭');
})
text3:
读取
文件读取
let fs = require("fs");
fs.readFile('text3.txt',(err,data)=>{
if(!err){
console.log(data);
console.log(data.toString());
fs.writeFile('text4.txt',data,(err)=>{
if(!err){
console.log('文件读取写入成功');
}else{
console.log('err:',err);
}
})
}else{
console.log('err:',err);
}
})
text4:
读取流
const fs = require('fs');
let rs = fs.createReadStream('text4.txt');
let ws = fs.createWriteStream('text5.txt');
//监听读取流打开
rs.once('open',function(){
console.log('监听读取流');
})
//监听读取流关闭
rs.once('close',function(){
console.log('读取流关闭');
})
//监听写入流打开
ws.once('open',function(){
console.log('监听写入流');
})
//监听写入流关闭
ws.once('close',function(){
console.log('写入流关闭');
})
//将读取流的数据通过写入流写入
rs.on('data',(data)=>{
ws.write(data);
})
text5:
管道
管道提供了一个输出流到输入流的机制
通常用于从一个流中获取数据并将数据传递到另外一个流中
const fs = require('fs');
let rs = fs.createReadStream('text5.txt');
let ws = fs.createWriteStream('text6.txt');
rs.pipe(ws);