【Node.jsfs模块笔记

2023年 10月 4日 78.9k 0

一、Node.js的应用

1、开发服务器的应用;

2、开发工具类的应用(webpack、vite、babel);

3、开发桌面端应用(electron)。

二、Node.js命令行工具

1、c盘如何切换d盘=> d: 回车

2、查看d盘下的内容=> dir 回车

3、查看d盘下的指定文件里的内容=> cd 文件名 回车 => dir

4、当前目录:.;上一级目录:..;

5、查看文件夹下所有文件内容【包括子文件夹下的内容】 dir /s;

6、停止运行 ctrl +c;

7、Tab自动补全代码。

三、使用Node.js运行JavaScript代码

第一步:选中JavaScript文件,点击右键
image.png
第二步:输入 node JavaScript.js【文件名】并且回车
image.png

四、Node.js注意事项

1、Node.js不能使用BOM和DOM的API,可以使用console和定时器API

2、Node.js中的顶级对象为global,也可以用globalThis访问顶级对象

五、Buffer

  • Buffer:缓冲器,类似Array的对象,表示固定长度的字节序列【一段固定长度的内存空间,用于处理二进制数据】;Buffer大小固定且无法调整、性能较好、可以直接对计算机内存进行操作、每个元素的大小为1字节(byte)
  • Buffer的创建
  • 方式一:alloc (1)会对每个元素进行二进制清零

    let buf_1=Buffer.alloc(10)
    console.log(buf_1);
    //{
        // 写入失败返回错误对象;写入成功返回null
        console.log(err);
    })
    

    同步写入(无回调)(易于理解)

    /**
     * 新建文件:text.txt
     * 在text.txt内填充内容 123
     */
    // 1、导入fs模块
    const fs = require('fs');
    fs.writeFileSync('./text.txt',"123",err=>{
        // 写入失败返回错误对象;写入成功返回null
        console.log(err);
    })
    

    3、fs的文件追加写入

    appendFile异步的方式

    // 1、引入fs模块
    const fs = require('fs')
    // appendFile:在文件尾部追加内容
    //2、 异步追加:fs.appendFile(file,data[,options],callback)
    fs.appendFile('./text.txt',"追加的内容",err=>{
        if (err) throw err;
        console.log(err);//null:表示追加成功
    })
    

    appendFileSync同步的方式

    // 1、导入fs模块
    const fs = require("fs")
    // 同步追加:fs.appendFileSync(file,data[,options])
    fs.appendFileSync("./text.txt","同步导入的内容")
    

    想要使追加的内容进行换行使用“rn”

    const fs = require("fs")
    fs.appendFileSync("./text.txt","rn同步导入的内容")
    

    writeFile实现内容的追加,通过设置{flag:'a'}
    使用场景:程序日志

    let fs = require("fs")
    fs.writeFile('./text.txt',"writeFile追加内容",{flag:'a'},err=>{
        if (err) {
            console.log("追加失败");
            return ;
        }
        console.log("追加成功");
    })
    

    4、fs的流式写入

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

    // 1、导入fs
    let fs = require('fs')
    // 2、创建写入流对象
    let ws = fs.createWriteStream('./text.txt');
    // 3、写入内容
    ws.write('1111111rn');
    ws.write('2222222rn');
    // 4、关闭通道(可写可不写)
    ws.close()
    

    5、文件写入的场景(需要持久化保存数据)

    (1)下载文件
    (2)安装软件
    (3)保存程序日志,如Git
    (4)编辑器保存文件
    (5)视频录制

    6、fs文件读取

    异步读取

    // 1、导入 fs
    let fs = require("fs")
    // 2、fs.readFile(path[,options],callback)
    // path:文件路径;options:选项配置;callback:回调函数。
    fs.readFile('./text.txt',(err,data)=>{
        if (err) {
            console.log("读取失败");
            return;
        }
        console.log(data);
        // 
        console.log(data.toString());
    })
    
    

    同步读取

    let fs = require('fs')
    let data = fs.readFileSync('./text.txt')
    console.log(data.toString());
    

    流式读取:一块一块的读取

    // 1、引入fs模块
    const  fs = require('fs')
    // 2、创建读取流对象
    const  rs = fs.createReadStream('./text.txt');
    // 3、绑定data事件
    rs.on('data',chunk=>{
        console.log(chunk);
        console.log(chunk.length);
    });
    rs.on('end',()=>{
        // 提供效率
        console.log("读取完成");
    });
    

    7、读取文件的应用场景

    (1)电脑开机
    (2)程序运行
    (3)编辑器打开文件
    (4)查看图片
    (5)播放视频
    (6)Git查看日志
    (7)上传文件

    8、复制文件

    方式一:使用readFile

    let fs = require('fs');
    // 读取文件内容
    let data = fs.readFileSync('./text.txt');
    // 写入文件
    fs.writeFileSync('./text_copy.txt',data)
    

    方式二:使用流式操作(占用的内存空间会比方式一小)

    // 1、导入fs模块
    let fs = require('fs');
    // 2、创建读取流对象
    const rs = fs.createReadStream('./text.txt');
    // 2、创建写入流对象
    const ws = fs.createWriteStream('.text_copy.txt');
    // 3、绑定data事件
    rs.on('data',chunk=>{
        ws.write(chunk)
    })
    
    

    9、文件的重命名

    异步方式

    // 1.导入fs模块
    const fs = require('fs')
    // 2.调用fs.rename(oldPath,newPath)方法
    fs.rename("./text.txt",'./textNew.txt',err=>{
        if (err) {
            console.log("操作失败");
            return;
        }
        console.log("操作成功");
    })
    

    同步方式

    // 1.导入fs模块
    const fs = require('fs')
    // 2.调用fs.rename(oldPath,newPath)方法
    fs.renameSync("./text.txt",'./textNew.txt')
    

    批量重命名

    // 1、导入fs模块
    const fs = require('fs')
    // 2、读取code文件夹
    const files = fs.readdirSync('../t');
    // 3、遍历数组
    files.forEach(item =>{
        // 拆分文件名
        let data = item.split("-")
        let [num,name]=data
        // 判断
        if (Number(num){
        if (err) {
            console.log("操作失败");
            return;
        }
        console.log("操作成功");
    })
    

    同步的方式

    // 1.导入fs模块
    const fs = require('fs')
    // 2.文件移动 fs
    fs.renameSync('./text.txt','../node/text.txt')
    

    11、fs文件的删除

    方法一:调用unlink方法 (异步);同步使用unlinkSync

    // 1、导入fs模块
    const fs = require('fs')
    // 2、调用unlink方法
    fs.unlink('./text.txt',err=>{
        if (err) {
            console.log("删除失败");
            return;
        }
        console.log("删除成功");
    })
    

    方法二:调用rm方法(异步);同步使用rmSync

    // 1、导入fs模块
    const fs = require('fs')
    // 2、调用unlink方法
    fs.rm('./text.txt',err=>{
        if (err) {
            console.log("删除失败");
            return;
        }
        console.log("删除成功");
    })
    

    12、实现文件夹操作

    (1)文件夹的创建

    异步:fs.mkdir(path)
    同步:fs.mkdirSync(path)
    递归目录需要设置{recursive:true}

    // 1、导入fs模块
    let fs = require('fs')
    // 2、创建文件夹
    fs.mkdir('./newFile',err=>{
        if(err){
            console.log("创建失败");
            return;
        }
        console.log("创建成功");
    })
    //3、递归创建目录需要设置{recursive:true},否则会报错
    fs.mkdir('./a/b/c',{recursive:true},err=>{
        if (err) {
            console.log("创建失败");
            return;
        }
        console.log("创建成功");
    })
    

    (2)读取文件夹

    let fs = require('fs')
    fs.readdir('../Buffer',(err,data)=>{
        if (err) {
            console.log(err);
            return;
        }
        console.log(data);
    })
    

    (3)删除文件夹

    let fs = require('fs')
    fs.rmdir('./newFile',err=>{
        if (err) {
            console.log("删除失败");
            return;
        }
        console.log("删除成功");
    })
    

    对应递归删除不推荐以下方法

    let fs = require('fs')
    // 当删除的文件里的文件夹内容不为空,即要进行递归删除,需要调用{recursive:true},否则报错
    fs.rmdir('./a',{recursive:true},err=>{
        if (err) {
            console.log("删除失败");
            return;
        }
        console.log("删除成功");
    })
    

    对于递归商城推荐以下方法

    let fs = require('fs')
    fs.rmSync('../node',{recursive:true})
    

    13、查看资源状态

    // 1、导入fs模块
    const fs = require("fs");
    // 2、调用fs.stat()方法
    fs.stat("./text.txt", (err,data) => {
      if (err) {
        console.log("操作失败");
        return;
      }
      console.log(data);
    //   isFile:判断是否文件
    console.log(data.isFile());
    // isDirectory:判断是否是文件夹
    
    console.log(data.isDirectory());
    });
    

    14、路径

    相对路径

    // 1、导入fs模块
    const fs = require('fs')
    // 相对路径
    fs.writeFileSync('./text2.txt',"text2")
    fs.writeFileSync('text3.txt',"text3")
    fs.writeFileSync('../text4.txt',"text4")
    

    由于相对路径参照物:命令行的工作目录

    // 绝对路径 '全局变量'保存的是:所在文件的所在目录
    console.log(__dirname);
    
    let fs = require('fs')
    fs.writeFileSync(__dirname+"/text.txt","1111")
    

    绝对路径是以盘符开头

    // 1、导入fs模块
    const fs = require('fs')
    // 绝对路径:以盘符开头
    fs.writeFileSync('D:/txt',"text")
    
    

    相关文章

    服务器端口转发,带你了解服务器端口转发
    服务器开放端口,服务器开放端口的步骤
    产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
    如何使用 WinGet 下载 Microsoft Store 应用
    百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
    百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

    发布评论