Node.js |(二)Node.js API:fs模块 | 尚硅谷2023版Node.js零基础视频教程

news2024/10/7 12:26:44

学习视频:尚硅谷2023版Node.js零基础视频教程,nodejs新手到高手

在这里插入图片描述

文章目录

  • 📚文件写入
    • 🐇writeFile 异步写入
    • 🐇writeFileSync 同步写入
    • 🐇appendFile / appendFileSync 追加写入
    • 🐇createWriteStream 流式写入
    • 🐇写入文件的场景
  • 📚文件读取
    • 🐇 readFile 异步读取
    • 🐇readFileSync 同步读取
    • 🐇createReadStream 流式读取
    • 🐇fs文件练习——文件复制
  • 📚文件移动与重命名
  • 📚文件删除
  • 📚文件夹操作
    • 🐇mkdir 创建文件夹
    • 🐇readdir 读取文件夹
    • 🐇rmdir 删除文件夹
    • 🐇fs文件练习——批量重命名
  • 📚查看资源状态
  • 📚相对路径问题
  • 📚_dirname全局变量

在这里插入图片描述

  • fsfile system,文件系统。
  • fs模块可以实现与硬盘的交互,例如文件的创建、删除、重命名、移动、内容的写入读取以及文件夹的相关操作。

📚文件写入

🐇writeFile 异步写入

  • 语法fs.writeFile(file,data[,options],callback)

  • 参数说明

    • file文件名
    • data 待写入的数据
    • options选项设置(可选)
    • callback写入回调
  • 返回值undefined

    /**
     * 需求:
     * 新建一个文件, 座右铭.txt, 写入内容, 三人行, 则必有我师焉
     */
    
    //1. 导入 fs 模块
    const fs = require('fs');
    
    //2. 写入文件
    fs.writeFile('./座右铭.txt', '三人行, 则必有我师焉', err => 
    {
      // err(回调函数)写入失败: 错误对象  写入成功: null
      if(err){
        console.log('写入失败');
        return;
      }
      console.log('写入成功');
    });
    

    在这里插入图片描述


  • 异步:如下,1+1在最后,但它压根不带等上边的,它俩一块运行,谁也不妨碍谁,1+1先跑完就先输出。

    /**
     * 需求:
     * 新建一个文件, 座右铭.txt, 写入内容, 三人行, 则必有我师焉
     */
    
    //1. 导入 fs 模块
    const fs = require('fs');
    
    //2. 写入文件
    fs.writeFile('./座右铭.txt', '三人行, 则必有我师焉', err => 
    {
      // err(回调函数)写入失败: 错误对象  写入成功: null
      if(err){
        console.log('写入失败');
        return;
      }
      console.log('写入成功');
    });
    
    console.log(1 + 1);
    

    在这里插入图片描述

🐇writeFileSync 同步写入

  • 语法: fs.writeFileSync(file, data[, options])

  • 参数与 fs.writeFile 大体一致,只是没有 callback 参数。

  • 返回值undefined

    //1. 导入 fs 模块
    const fs = require('fs');
    
    //2. 写入文件
    //同步写入
    fs.writeFileSync('./data.txt', 'test');
    console.log(1 + 1);
    
  • 同步:就是一条道,我走完你再走,从上到下顺序执行。

    /**
     * 需求:
     * 新建一个文件, 座右铭.txt, 写入内容, 三人行, 则必有我师焉
     */
    
    //1. 导入 fs 模块
    const fs = require('fs');
    
    //2. 写入文件
    //同步写入
    try{
        fs.writeFileSync('./座右铭.txt', '三人行,必有我师焉。');
        console.log('OK');
    }
    catch(e){
        console.log(e);
    }
    console.log(1 + 1);
    

    在这里插入图片描述


Node.js 中的磁盘操作是由其他线程完成的,结果的处理有两种模式:

  • 同步处理:JavaScript主线程会等待其他线程的执行结果,然后再继续执行主线程的代码,效率较低
  • 异步处理:JavaScript主线程不会等待其他线程的执行结果,直接执行后续的主线程代码,效率较好

🐇appendFile / appendFileSync 追加写入

  • appendFile 作用是在文件尾部追加内容,appendFile 语法与 writeFile 语法完全相同。

  • 语法:

    • fs.appendFile(file, data[, options], callback)
    • fs.appendFileSync(file, data[, options])
  • 返回值: 二者都为 undefined

    //1. 引入 fs 模块
    const fs = require('fs');
    
    //2. 调用 appendFile
    fs.appendFile('./座右铭.txt', ',择其善者而从之, 择期不善者而改之', err => {
      //判断
      if(err){
        console.log('写入失败~~');
        return;
      }
      console.log('追加写入成功');
    });
    
    fs.appendFileSync('./座右铭.txt', '\r\n温故而知新, 可以为师矣')
    
    //writeFile 实现追加写入
    fs.writeFile('./座右铭.txt', 'love love love',{flag: 'a'}, err => {
      if(err) {
        console.log('写入失败~');
        return ;
      }
      console.log('写入成功');
    });
    

    在这里插入图片描述

🐇createWriteStream 流式写入

  • 语法fs.createWriteStream(path[, options])
  • 参数说明
    • path:文件路径
    • options:选项配置( 可选 )
  • 返回值Object
    //1. 导入 fs 
    const fs = require('fs');
    
    //2. 创建写入流对象 
    const ws = fs.createWriteStream('./观书有感.txt');
    
    //3. write
    ws.write('半亩方塘一鉴开\r\n');
    ws.write('天光云影共徘徊\r\n');
    ws.write('问渠那得清如许\r\n');
    ws.write('为有源头活水来\r\n');
    
    //4. 关闭通道
    ws.close();
    
    在这里插入图片描述

  • 程序打开一个文件是需要消耗资源的 ,流式写入可以减少打开关闭文件的次数
  • 流式写入方式适用于大文件写入或者频繁写入的场景, writeFile 适合于写入频率较低的场景

🐇写入文件的场景

在这里插入图片描述

📚文件读取

在这里插入图片描述

🐇 readFile 异步读取

  • 语法fs.readFile(path[, options], callback)

  • 参数说明

    • path:文件路径
    • options:选项配置
    • callback:回调函数
  • 返回值undefined

    //1. 引入 fs 模块
    const fs = require('fs');
    
    //2. 异步读取
    fs.readFile('./观书有感.txt', (err, data) => {
      if(err) {
        console.log('读取失败~~');
        return;
      }
      console.log(data.toString());
    });
    

🐇readFileSync 同步读取

  • 语法fs.readFileSync(path[, options])

  • 参数说明

    • path:文件路径
    • options:选项配置
  • 返回值string | Buffer

    //1. 引入 fs 模块
    const fs = require('fs');
    //2. 同步读取
    let data = fs.readFileSync('./观书有感.txt');
    console.log(data.toString());
    

🐇createReadStream 流式读取

  • 语法fs.createReadStream(path[, options])

  • 参数说明

    • path:文件路径
    • options:选项配置( 可选 )
  • 返回值Object

    //1. 引入 fs 模块
    const fs = require('fs');
    
    //2. 创建读取流对象
    const rs = fs.createReadStream('../资料/笑看风云.mp4');
    
    //3. 绑定 data 事件   chunk 块儿  大块儿
    rs.on('data', chunk => {
      console.log(chunk.length); // 65536 字节 => 64KB,每次读取64KB的数据
    });
    
    //4. end  可选事件
    rs.on('end', () => {
      console.log('读取完成');
    });
    

    在这里插入图片描述


  • 读取文件应用场景
    在这里插入图片描述

🐇fs文件练习——文件复制

/**
 * 需求:
 *   复制『资料』文件夹下的『笑看风云.mp4』
 */
const fs = require('fs');

//方式一 readFile
//读取文件内容
let data = fs.readFileSync('../资料/笑看风云.mp4');
//写入文件
fs.writeFileSync('../资料/笑看风云-2.mp4', data);

//方式二 流式操作
//创建读取流对象
const rs = fs.createReadStream('../资料/笑看风云.mp4');
//创建写入流对象
const ws = fs.createWriteStream('../资料/笑看风云-3.mp4');

//绑定 data 事件
rs.on('data', chunk => {
  ws.write(chunk);
});

在这里插入图片描述


查看内存占用量

const fs = require('fs');
const process = require('process');

//方式一 readFile
let data = fs.readFileSync('../资料/笑看风云.mp4');
fs.writeFileSync('../资料/笑看风云-2.mp4', data);
console.log("我是readfile的结果");
console.log(process.memoryUsage()); 

//方式二 流式操作
const rs = fs.createReadStream('../资料/笑看风云.mp4');
const ws = fs.createWriteStream('../资料/笑看风云-3.mp4');

//绑定 data 事件(2.1)
rs.on('data', chunk => {
  ws.write(chunk);
});

rs.on('end', () => {
  console.log("我是流式读取的结果");
  console.log(process.memoryUsage());  
})

//(2.2),借助管道完成读取
// rs.pipe(ws);

在这里插入图片描述

  • 视频里头流式处理可厉害了,我这咋流式处理菜菜的?
  • 流式处理所占用的内存比直接读取更大是因为流式处理需要在处理数据时逐行或逐块读取数据,并将其存储在内存中以进行后续处理。这意味着在读取数据时,需要维护一个缓冲区来存储数据,因此在处理大量数据时,内存的使用率可能比直接读取更高。
  • 另外,流式处理还需要在处理后及时释放内存,否则可能会导致内存泄漏和程序崩溃等问题。因此,在设计流式处理程序时需要特别注意内存的使用和释放问题,以确保程序的稳定性和可靠性。

📚文件移动与重命名

  • 在 Node.js 中,我们可以使用 renamerenameSync 来移动或重命名 文件或文件夹
  • 语法
    • fs.rename(oldPath, newPath, callback)
    • fs.renameSync(oldPath, newPath)
  • 参数说明
    • oldPath:文件当前的路径
    • newPath:文件新的路径
    • callback:操作后的回调
    //1. 导入 fs 模块
    const fs = require('fs');
    
    //2. 调用 rename 方法
    fs.rename('./座右铭.txt', './论语.txt', err => {
      if(err) {
        console.log('操作失败~');
        return;
      }
      console.log('操作成功');
    });
    
    //文件的移动
    fs.rename('./data.txt', '../资料/data.txt', err => {
      if(err) {
        console.log('操作失败~');
        return;
      }
      console.log('操作成功');
    })
    

📚文件删除

  • 在 Node.js 中,我们可以使用unlinkunlinkSyncrmrmSync来删除文件。
  • 语法
    • fs.unlink(path, callback)
    • fs.unlinkSync(path)
    • fs.rm(path, callback)
    • fs.rmSync(path)
  • 参数说明
    • path:文件路径
    • callback:操作后的回调
    //1. 导入 fs 模块
    const fs = require('fs');
    
    //2. (一)调用 unlink 方法    unlinkSync
    fs.unlink('./观书有感.txt', err => {
      if(err) {
        console.log('删除失败~');
        return;
      }
      console.log('删除成功');
    });
    
    // 2. (二)调用 rm 方法   rmSync
    fs.rm('./论语.txt', err => {
    	if (err) {
    		console.log('删除失败~');
    		return;
    	}
    	console.log('删除成功');
    })
    

📚文件夹操作

在这里插入图片描述

补充笔记:常用的 Linux 操作

🐇mkdir 创建文件夹

  • 在 Node.js 中,我们可以使用 mkdirmkdirSync来创建文件夹
  • 语法
    • fs.mkdir(path[, options], callback)
    • fs.mkdirSync(path[, options])
  • 参数说明
    • path:文件夹路径
    • options:选项配置( 可选 )
    • callback:操作后的回调

🐇readdir 读取文件夹

  • 在 Node.js 中,我们可以使用 readdirreaddirSyn 来创建文件夹
  • 语法
    • fs.readdir(path[, options], callback)
    • fs.readdirSync(path[, options])
  • 参数说明
    • path:文件夹路径
    • options:选项配置( 可选 )
    • callback:操作后的回调

🐇rmdir 删除文件夹

  • 在 Node.js 中,我们可以使用 rmdirrmdirSync来创建文件夹
  • 语法
    • fs.rmdir(path[, options], callback)
    • fs.rmdirSync(path[, options])
  • 参数说明
    • path:文件夹路径
    • options:选项配置( 可选 )
    • callback:操作后的回调

//1. 导入 fs 模块
const fs = require('fs');

//2. 创建文件夹  mk  make 制作  dir directory 文件夹
fs.mkdir('./html', err => {
  if(err) {
    console.log('创建失败~');
    return;
  }
  console.log('创建成功');
});

//2-2 递归创建
fs.mkdir('./a/b/c', {recursive: true},err => {
  if(err) {
    console.log('创建失败~');
    return;
  }
  console.log('创建成功');
});

//2-3 读取文件夹   read 读取  dir  directory 文件夹
fs.readdir('../资料', (err, data) => {
  if(err){
    console.log('读取失败');
    return;
  }
  console.log(data);
});

fs.readdir('./', (err, data) => {
  if(err){
    console.log('读取失败');
    return;
  }
  console.log(data);
});

//2-4 删除文件夹  rm  remove 移除
fs.rmdir('./html', err => {
  if(err){
    console.log('删除失败');
    return;
  }
  console.log('删除成功');
});

//递归删除    不推荐使用
// fs.rmdir('./a', {recursive: true},err => {
//   if(err){
//     console.log(err);
//     return;
//   }
//   console.log('删除成功');
// });

//建议使用
fs.rm('./a', {recursive: true},err => {
  if(err){
    console.log(err);
    return;
  }
  console.log('删除成功');
});

🐇fs文件练习——批量重命名

  • 需求:批量重命名,把1、2等变为01、02等,可应用于防止网盘文件错位。

    //导入 fs 模块
    const fs = require('fs');
    
    //读取 code 文件夹
    const files = fs.readdirSync('./code');
    
    //遍历数组
    files.forEach(item => {
      //拆分文件名
      let data = item.split('-');
      let [num, name] = data;//num存数字,name存文件名
      //判断
      if(Number(num) < 10){
        num = '0' + num;
      }
      //创建新的文件名
      let newName = num + '-' + name;
      //重命名
      fs.renameSync(`./code/${item}`, `./code/${newName}`);
    })
    
  • 需求:批量重命名并排好序,比如1、3、4变为01、02、03。

    //导入 fs 模块
    const fs = require('fs');
    
    //读取 code 文件夹
    const files = fs.readdirSync('./code');
    
    //遍历数组
    files.forEach((item, index) => {
      //拆分
      let [num, name] = item.split('-');
      //index 自增
      index++;
      //判断
      index = index < 10 ? '0' + index : index;
      //拼接新的名字
      let newName = index + '-' + name;
      //移动文件
      fs.renameSync(`./code/${item}`, `./code/${newName}`);
    });
    

📚查看资源状态

  • 在 Node.js 中,我们可以使用 statstatSync来创建文件夹

  • 语法

    • fs.stat(path[, options], callback)
    • fs.statSync(path[, options])
  • 参数说明

    • path:文件夹路径
    • options:选项配置( 可选 )
    • callback:操作后的回调
    //1. 导入 fs 模块
    const fs = require('fs');
    
    //2. stat 方法  status 缩写 状态
    fs.stat('../资料/笑看风云.mp4', (err, data) => {
      if(err){
        console.log('操作失败');
        return;
      }
      console.log(data);
      console.log(data.isFile());
      console.log(data.isDirectory());
    });
    

    在这里插入图片描述

    • size 文件体积
    • birthtime 创建时间
    • mtime 最后修改时间
    • isFile 检测是否为文件
    • isDirectory 检测是否为文件夹

📚相对路径问题

学习html图片标签时对相对路径问题有过介绍

在这里插入图片描述

📚_dirname全局变量

  • __dirnamerequire类似,都是 Node.js 环境中的全局变量
  • __dirname保存着当前文件所在目录的绝对路径 ,可以使用 __dirname与文件名拼接成绝对路径
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/850278.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

点成分享丨qPCR仪的原理与使用——以Novacyt产品为例

近年来&#xff0c;PCR检测在多种领域发挥着巨大的作用。短时高效和即时监测都成为了PCR仪发展的方向。作为世界领先的制造商之一&#xff0c;Novacyt公司为来自全球多个国家和行业的用户提供了优质的qPCR仪。 MyGo Mini S qPCR仪是一种紧凑型的实时qPCR仪&#xff0c;非常适合…

【算法|双指针系列No.1】leetcode283. 移动零

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…

c++进阶--二叉搜索树

目录 前言 一、二叉搜索树 1.二叉搜索树概念 2.二叉搜索树操作 二、二叉搜索树实现 0.定义一个节点 1.定义一棵树 2.增删改查 2.1.查找 2.2.插入 2.3.删除 2.3.1非递归删除法 a.只有左孩子 -- 删除14 b.只有右孩子-- 删除10 c.有左右孩子--删除8 2.3.2递归删除…

【论文总结】Chatting with GPT-3 for Zero-Shot Human-Like Mobile Automated GUI Testing

与GPT-3对话进行零尝试人类化移动自动化GUI测试 摘要&#xff1a; 移动应用在人们的日常生活中变得不可或缺&#xff0c;而自动化图形用户界面&#xff08;Graphical User Interface&#xff0c;GUI&#xff09;测试广泛用于应用程序质量保证。对于自动化GUI测试&#xff0c;越…

rv1126更新rknpu驱动教学

测试平台&#xff1a;易佰纳rv1126 38板 查看板端版本-------------------------------------------------- 1&#xff1a;查看npu驱动版本 dmesg | grep -i galcore&#xff0c;可以看到版本为6.4.3.5 2&#xff1a;查看rknn-server版本 strings /usr/bin/rknn_server | g…

新能源电动车充电桩控制主板的材料选择

新能源电动车充电桩控制主板的材料选择 你是否想过&#xff0c;汽车充电桩控制主板的材料选择竟然还有这么多讲究?不再只是简单的充电问题&#xff0c;而是涉及到耐高温、耐高压、耐腐蚀、耐潮湿、耐油污、低热耗等方方面面。 首先&#xff0c;安全性是材料选择的首要考虑因素…

mysql自增主键不连续情况分析

1.唯一键冲突 比如increnment_test中已经存在了co1为3的记录,当再插入col1为3的记录时,就会出现主键不唯一错误,但此时自增主键已经1,所以会发生主键不连续情况 DROP TABLE IF EXISTS increnment_test; CREATE TABLE increnment_test (id int(0) NOT NULL AUTO_INCREMENT,col…

svg使用技巧

什么是svg SVG 是一种基于 XML 语法的图像格式&#xff0c;全称是可缩放矢量图&#xff08;Scalable Vector Graphics&#xff09;。其他图像格式都是基于像素处理的&#xff0c;SVG 则是属于对图像的形状描述&#xff0c;所以它本质上是文本文件&#xff0c;体积较小&#xf…

Python-OpenCV中的图像处理

Python-OpenCV中的图像处理 颜色空间转换物体跟踪获取HSV的值几何变换图像缩放图像平移图像旋转仿射变换透视变换 图像阈值单阈值自适应阈值Otsus二值化 颜色空间转换 在 OpenCV 中有超过 150 中进行颜色空间转换的方法。但是你以后就会 发现我们经常用到的也就两种&#xff1…

ZMQ发布订阅模式二次封装

ZeroMQ 参考ZMQ从入门到掌握一 ZeroMQ是一种基于消息队列的多线程网络库&#xff0c;其对套接字类型、连接处理、帧、甚至路由的底层细节进行抽象&#xff0c;提供跨越多种传输协议的套接字。ZeroMQ 并不是一个对 socket 的封装&#xff0c;不能用它去实现已有的网络协议。它有…

加密、解密、编码

urlencode urlencode_百度百科 Base64是一种二进制到文本的编码方式&#xff0c;而且编码出的字符串只包含ASCII基础字符 下图是Base64码表&#xff0c;可以看到从0到63的每个数字都对应一个上面的一个字符。 文件-base64字符串互转 sun.misc包中的类 try (FileOutputStre…

Node.Js安装与配置教程

目录 1.下载官网 2.选择安装路径 3.添加环境变量 4.验证是否安装成功 5.修改模块下载位置 (1)查看npm默认存放位置 6.在node.js安装目录下&#xff0c;创建两个文件夹 7.修改默认文件夹 8.测试默认位置是否更改成功 9.安装报错解决办法 10.路径未更改成功解决办法 …

MIT 6.830数据库系统 -- lab six

MIT 6.830数据库系统 -- lab six 项目拉取引言steal/no-force策略redo log与undo log日志格式和检查点 开始回滚练习1&#xff1a;LogFile.rollback() 恢复练习2&#xff1a;LogFile.recover() 测试结果疑问点分析 项目拉取 原项目使用ant进行项目构建&#xff0c;我已经更改为…

【uniapp 小程序开发页面篇】代码编写规范 | 页面编写规范 | 小程序API

博主&#xff1a;_LJaXi Or 東方幻想郷 专栏&#xff1a; uni-app | 小程序开发 开发工具&#xff1a;HBuilderX 小程序开发页面篇 小程序组件规范小程序介绍小程序规范代码编写规范须遵循的开发规范 运行特性编译器选择编译规则工程目录结构static目录 使用注意static目录 条件…

Spring-2-透彻理解Spring 注解方式创建Bean--IOC

今日目标 学习使用XML配置第三方Bean 掌握纯注解开发定义Bean对象 掌握纯注解开发IOC模式 1. 第三方资源配置管理 说明&#xff1a;以管理DataSource连接池对象为例讲解第三方资源配置管理 1.1 XML管理Druid连接池(第三方Bean)对象【重点】 数据库准备 -- 创建数据库 create …

Easys Excel的表格导入(读)导出(写)-----java

一,EasyExcel官网: 可以学习一些新知识: EasyExcel官方文档 - 基于Java的Excel处理工具 | Easy Excel 二,为什么要使用easyexcle excel的一些优点和缺点 java解析excel的框架有很多 &#xff1a; poi jxl,存在问题&#xff1a;非常的消耗内存&#xff0c; easyexcel 我们…

使用TDOSCommand调用Powershell脚本对进程进行操作

列出当前运行的进程&#xff1a; varPowerShellPath, ScriptPath, CommandLine: string; beginMemo6.Clear;PowerShellPath : powershell.exe ; // 假设 PowerShell 可执行文件在系统环境变量中// 构造命令行参数CommandLine : Get-Process | Select-Object Name,Id;// 设置命…

【Linux】总结2-进程篇1

文章目录 冯诺伊曼结构操作系统什么是程序&#xff1f;什么是进程&#xff1f;操作系统是如何来管理进程的&#xff1f;PCB&#xff08;struct task_struct{...}&#xff09; 冯诺伊曼结构 冯诺依曼提出了计算机制造的三个基本原则&#xff0c;即采用二进制逻辑、程序存储执行…

Stable Diffusion - 常用的负向提示 Embeddings 解析与 坐姿 (Sitting) 提示词

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/132145248 负向 Embeddings 是用于提高 StableDiffusion 生成图像质量的技术&#xff0c;可以避免生成一些不符合预期的图像特征&#xff0c;比如…

day5gdb调试模式和makefile

一、gdb调试 1.1gdb调试的作用 gdb调试检查的是逻辑错误&#xff0c;而非语法错误 1.2gdb流程 1、gcc -g 1.c ---->加-g参数的作用&#xff0c;生成可以调试的gdb文件 2、gdb 可执行文件名/a.out ---->进入gdb工具进行调试 3、输入l&#xff0c;带行号打印文件信息…