Nodejs学习笔记(三)——同步和与异步之文件系统模块

【目录】
Nodejs学习笔记(一)——基础之全局对象、包和npm
Nodejs学习笔记(二)——模块
Nodejs学习笔记(四)——http协议与服务器
Nodejs学习笔记(五)——express框架、路由(器)及中间件
Nodejs学习笔记(六)——Mysql模块
Nodejs学习笔记(七)——接口API


一.同步和异步

  • 同步:在主程序中执行,会阻止后续代码的运行,是通过返回值来获取结果
  • 异步: 在一个独立的线程执行,不会阻止后续代码的运行,是通过回调函数来获取结果

二、 文件系统模块

所有操作前都要先引入文件fs模块
const fs = require('fs');

(1)查看文件

  • fs.stat(文件的路径, 回调函数)
    回调函数 用来获取结果

err 可能产生的错误
s 成功的结果

(2)读取目录

  • readdirSync(目录的路径) :同步读取目录
  • readdir(目录的路径, 回调函数):异步读取目录
const fs = require('fs');


//同步读取目录 readdirSync(目录的路径)
let arr = fs.readdirSync('./day');
console.log(arr);

//异步读取目录 readdir(目录的路径, 回调函数)
fs.readdir('./day',(err, arr)=>{
    if(err) throw err;
    console.log(arr);
});

(3)读取文件

  • readFileSync(文件的路径):同步读取文件
  • readFile(文件的路径,回调函数):异步读取文件

读取的数据格式默认为buffer

main.js:

const fs = require('fs');

//同步读取文件 
let data = fs.readFileSync('./test.txt');

//读取的数据格式默认为buffer
console.log(data);
console.log(data.toString());


//异步读取文件 
fs.readFile('./test.txt', (err,data)=> {
    if (err) throw err;
    console.log(data.toString());
});

test.txt:
this is a text
在这里插入图片描述

(4)检测路径

  • fs.existsSync(’./mydir’):检测该路径是否存在
const fs = require('fs');

//检测该路径是否存在
if (fs.existsSync('./mydir')) {
    fs.rmdirSync('./mydir');
} else {
    fs.mkdirSync('./mydir');
}

(5)清空写入

  • fs.writeFileSync(文件路径, 写入字符串):同步写入文件
  • fs.writeFile(文件路径, 写入字符串,回调函数):异步写入文件

如果文件不存在,先创建文件然后写入数据
如果文件存在,先清空文件的内容,然后写入数据

const fs = require('fs');

//同步写入文件,有Sync
fs.writeFileSync('./1.txt', 'erya');

//异步写入文件,要回调函数
fs.writeFile('./2.txt', 'erya2', (err)=>{
    if (err) throw err;
    console.log('异步写入成功');
});

(6)追加写入

  • fs.appendFileSync(文件路径, 写入字符串):同步追加写入文件
  • fs.appendFile(文件路径, 写入字符串,回调函数):异步追加写入文件

如果文件不存在,先创建文件然后写入数据
如果文件存在,会在文件末尾追加写入数据

const fs = require('fs');

//同步追加写入文件,有Sync
fs.appendFileSync('./main.txt', 'erya');

//异步追加写入文件,要回调函数
fs.appendFile('./1.txt', '\nerya2', (err)=>{
    if (err) throw err;
    console.log('异步写入成功');
});

(7)拷贝文件

文件名称:防止重复可以使用事件毫秒数命名!!!

stu.txt:
1 2 3 4 5 6 7 8 9

main.js:

const fs = require('fs');

let date = new Date();
let time = date.getTime();
  • 同步拷贝文件:fs.copyFileSync(源文件路径,目标文件路径)
fs.copyFileSync('./stu.txt', `./${time}.txt`);
  • 异步拷贝文件:fs.copyFile(源文件路径,目标文件路径,回调函数)
fs.codeFileSync('./stu.txt', `./mydir/${time}.txt`, (err)=> {
    if (err) throw err;
});

(8)删除文件

  • fs.unlinkSync(path):同步删除文件
  • fs.unlink(path, callback):异步删除文件
    在这里插入图片描述
    main.js:
const fs = require('fs');

fs.unlinkSync('./1.txt');//同步删除1.txt

fs.unlink('./2.txt', (err) => {//异步删除2.txt
    if (err) throw err;
    console.log('异步删除成功');
});

可见,删除成功!
在这里插入图片描述

(9)文件流

  • fs.createReadStream(文件路径); 创建可读取的文件流
  • fs.createWriteStream(’./2.zip’); 创建将读取的文件流添加到可写入的文件流
  • pipe(); 管道,可以将读取流通过管道添加到写入流
  • on(参数1, 参数2 callback) 添加事件
    参数1:是一个字符串,表示事件名称,固定,例如:data 数据流入
    参数2:是一个回调函数,一旦触发事件,调用这个函数,在callback中获取流入的数据

在同目录下放一个压缩包“test.rar"
在这里插入图片描述
main.js:

const fs = require('fs');

//创建可读取的文件流,返回对象
let rs = fs.createReadStream('./test.rar');

//创建将读取的文件流添加到可写入的文件流
let ws = fs.createWriteStream('./2.zip');
rs.pipe(ws);

上述代码相当于拷贝一个test.rar,命名为2.zip
在这里插入图片描述

添加事件,监听是否有数据流入内存

let count = 0;
rs.on('data', (chunk) => {
    
    //chunk 获取的分段数据
    //console.log(chunk);
    count++;
});
//添加事件:读取结束事件
//一旦读取结束,就调用函数
rs.on('end', () => {
    console.log(count);//输出分段数据的段数
})
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你脸上有BUG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值