nodejs fs模块的基本使用

介绍

fs是nodejs的一个模块,利用它我们可以实现在本地文件的增删改查等等一些操作

基本使用

使用require引入模块,

此处需注意,fs是node的一个模块需要通过node指令在终端运行,初期自己学习的时候踩了一个大坑就是一个劲的在各种前端页面里面直接使用,那样是行不通的

const fs = require('fs');

通过打印可以看出fs是一个对象,身上有许多的方法可以供我们使用

 写入文件

	// 参数一:文件名称,(必填)
	// 参数二:写入的内容,(必填)
	// 参数三:选项设置(选填)
	// 参数四:写入的回调
// 推荐使用异步的方法
fs.writeFile('./测试fs异步.txt', '测试内容异步写入', err => {
    console.log(err, 'err')
})
// 同步参数跟异步的一样
fs.writeFileSync('./测试fs同步.txt', '测试内容同步写入', err => {
    console.log(err, 'err')
})

文件追加写入

// 参数与写入文件参数一样
// 使用\r\n符号可以实现写入内容换行
fs.appendFile('./测试fs异步.txt', '\r\n追加内容', err => {
        console.log(err, 'err')
})
// 借助fs.writeFile也可以实现内容的追加写入,只需要将第三个参数对象里的flag设置为'a'即可
fs.writeFile('./测试fs异步.txt', '\r\nwriteFilez追加内容',{flag:'a'}, err => {
    console.log(err, 'err')
    if (err) {
        console.log('写入失败');
    }
    console.log('写入成功');
})

文件流写入

// 通过fs.createWriteStream可以与文件建立一个通道
// 参数:文件路径
const  access = fs.createWriteStream('./测试fs异步.txt');
// 通过通道的write方法可以连续写入内容
access.write('通道写入内容1\r\n');
access.write('通道写入内容2\r\n');
access.write('通道写入内容3\r\n');
access.write('通道写入内容4\r\n');
// 关闭通道(可写可不写)
access.close()

文件读取

// 异步读取
// 接收三个参数
// 参数一:读取的文件路径
// 参数二:一个配置对象(可选)
// 参数三:回调函数
// 回调函数参数:
// 参数一:读取失败的错误信息
// 参数二:读取成功的数据
fs.readFile('./测试fs异步.txt',(err,data)=>{
    if(err){
        console.log('读取失败');
        return;
    }
    console.log(data.toString(),'读取成功');
    // 读取成功之后是一个buffer数据,可以通过toString()转为字符串
})

打印值:

 同步读取

// 同步读取
// 读取成功返回一个buffer值,同样需要toString()处理一下
let data = fs.readFileSync('./测试fs异步.txt')
console.log(data.toString(),'读取成功');

文件流式读取

// 通过fs.createReadStream方法建立通道
// 参数一:读取的文件路径
// 此方法读取数据不是一次性读完的,而是一次读一小部分
const access = fs.createReadStream('./static/饮茶先.mp4');
// 通过通道的on方法来绑定对应事件,data为读取数据事件
access.on('data',chunk=>{
    console.log(chunk,'文件流读取');
    // 读取的数据依旧为一个buffer数据
    // 如果读取的数据不是文本此时要是通过toString转字符串转出来的数据会乱码
})
// end为结束事件
access.on('end',()=>{
    console.log('读取完成');
})

文件复制

// 复制文件
// 原理就是先读取然后再写入
const rs = fs.readFileSync('./static/饮茶先.mp4')
fs.writeFileSync('./static/饮茶先2.mp4',rs)

// 文件流式的复制
// 文件流式的复制更加节约内存占用大小
// 先建立读取通道,然后再创建写入通道
const rs2 = fs.createReadStream('./static/饮茶先.mp4')
const ws2 = fs.createWriteStream('./static/饮茶先3.mp4',);

rs2.on('data',chunk=>{
    // chunk为读取的内容
    ws2.write(chunk);
})
// 直接使用下面方法也可实现复制功能
rs2.pipe(ws2)

文件重命名与移动

// 文件重命名
// 参数一:重命名的文件路径
// 参数二:新名字或者新路径
// 参数三:回调函数
fs.rename('./test.txt','./重命名之后.txt',err=>{
    if(err){
        console.log('重命名失败',err);
        return;
    }
    console.log('重命名成功');
})
// 文件移动
// 参数一:要移动的文件路径
// 参数二:新的路径(或者新的名字)
// 参数三:回调函数
fs.rename('./重命名之后.txt','./static/test.txt',err=>{
    if(err){
        console.log('移动失败',err);
        return;
    }
    console.log('移动成功');
})

// fs.renameSync,大致与fs.rename差不多,只是没有第三个参数(回调函数)

文件删除

// 文件删除
// 参数一:要删除的文件路径
// 参数二:回调函数
fs.unlink('./static/test.txt', err => {
    if (err) {
        console.log('删除失败', err);
        return;
    }
    console.log('删除成功');
})

// fs.rm需要node版本大于14.4
fs.rm('./static/test.txt', err => {
    if (err) {
        console.log('删除失败', err);
        return;
    }
    console.log('删除成功');
})

文件夹操作


// 文件夹操作
fs.mkdir('./file', err => {
    if (err) {
        console.log('创建失败', err);
        return;
    }
    console.log('创建成功');
})
// // 递归创建
// // recursive:true,表示开启递归创建
fs.mkdir('./a/b/c',{recursive:true}, err => {
    if (err) {
        console.log('创建失败', err);
        return;
    }
    console.log('创建成功');
})

// // 读取文件夹
fs.readdir('./static', (err,data) => {
    if (err) {
        console.log('读取失败', err);
        return;
    }
    console.log('读取成功',data);
})

// // 删除文件夹
fs.rmdir('./file', err => {
    if (err) {
        console.log('读取失败', err);
        return;
    }
    console.log('读取成功');
})

// // 递归删除文件夹
// // recursive:true,表示开启递归删除,
fs.rmdir('./a',{recursive:true}, err => {
    if (err) {
        console.log('读取失败', err);
        return;
    }
    console.log('读取成功');
})

// // 递归删除文件夹2,rm方法需要node版本大于14.4
// // recursive:true,表示开启递归删除,
fs.rm('./a',{recursive:true}, err => {
    if (err) {
        console.log('读取失败', err);
        return;
    }
    console.log('读取成功');
})

注:关于node的路径问题,比如在创建文件的时候终端命令行路径为a文件夹,那么写入文件的时候路径参数传一个./file,最终会在终端路径的文件夹同级创建file文件,而不是所运行的js文件同级创建file文件,此外fs身上还有很多的一些其他方法需要用的时候再去找吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值