• Node学习笔记之fs模块


    fs 全称为 file system ,称之为 文件系统 ,是 Node.js 中的 内置模块 ,可以对计算机中的磁盘进行操
    作。
    本章节会介绍如下几个操作:

    1. 文件写入
    2. 文件读取
    3. 文件移动与重命名
    4. 文件删除
    5. 文件夹操作
    6. 查看资源状态

    一、文件写入

    文件写入就是将 数据 保存到 文件 中,我们可以使用如下几个方法来实现该效果

    方法

    说明

    writeFile

    异步写入

    writeFileSync

    同步写入

    appendFile / appendFileSync

    追加写入

    createWriteStream

    流式写入

    1-1. writeFile 异步写入

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

    参数说明:

    file 文件名

    data 待写入的数据

    options 选项设置 (可选)

    callback 写入回调

    返回值:undefined

    代码示例:

    1. // require 是 Node.js 环境中的'全局'变量,用来导入模块
    2. const fs = require('fs');
    3. //将 『css』 写入到当前文件夹下的『study.txt』文件中
    4. fs.writeFile('./study.txt', 'css', err => {
    5. //如果写入失败,则回调函数调用时,会传入错误对象,如写入成功,会传入 null
    6. if (err) {
    7. console.log(err);
    8. return;
    9. }
    10. console.log('写入成功')
    11. });

    1-2. writeFileSync 同步写入

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

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

    返回值: undefined

    代码示例:

    1. const fs = require('fs');
    2. try {
    3. fs.writeFileSync('./study.txt', 'vue');
    4. } catch (e) {
    5. console.log(e);
    6. }

    1-3. appendFile / appendFileSync 追加写入

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

    fs.appendFile(file, data[, options], callback)

    fs.appendFileSync(file, data[, options])

    返回值:二者都为undefined

    实例代码:

    1. const fs = require('fs');
    2. fs.appendFile('./study.txt', 'react', err => {
    3. if (err) throw err;
    4. console.log('追加成功')
    5. });
    6. fs.appendFileSync('./study.txt', '\r\nnode');

    1-4. createWriteStream 流式写入

    语法:fs.createWriteStream(path[, options])

    参数说明:

    path 文件路径

    options 选项配置( 可选 )

    返回值: Object

    码示例:

    1. const fs = require('fs');
    2. let ws = fs.createWriteStream('./music.txt');
    3. ws.write('无关风月 我题序等你回\r\n');
    4. ws.write('手中无愧 无惧人间是非\r\n');
    5. ws.write('雨打蕉叶 又萧萧了几夜\r\n');
    6. ws.write('我等春雷 来提醒你爱谁\r\n');
    7. ws.end();

    1-5 写入文件的场景

    文件写入 在计算机中是一个非常常见的操作,下面的场景都用到了文件写入

    • 下载文件
    • 安装软件
    • 保存程序日志,如 Git
    • 编辑器保存文件
    • 视频录制

    当 需要持久化保存数据 的时候,应该想到 文件写入

    二、文件读取

    文件读取顾名思义,就是通过程序从文件中取出其中的数据,我们可以使用如下几种方式:

    方法

    说明

    readFile

    异步读取

    readFileSync

    同步读取

    createReadStream

    流式读取

    2-1 readFile 异步读取

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

    参数说明:

    path 文件路径

    options 选项配置

    callback 回调函数

    返回值:undefined

    代码示例:

    1. const fs = require('fs');
    2. fs.readFile('./study.txt', (err, data) => {
    3. if (err) throw err;
    4. console.log(data, '111');
    5. });
    6. fs.readFile('./study.txt', 'utf-8', (err, data) => {
    7. if (err) throw err;
    8. console.log(data, '222');
    9. });

    2-2 readFileSync 同步读取

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

    参数说明:

    path 文件路径

    options 选项配置

    返回值:string | Buffer

    代码示例:

    1. const fs = require('fs');
    2. let data = fs.readFileSync('./study.txt');
    3. let data2 = fs.readFileSync('./study.txt', 'utf-8');
    4. console.log(data)
    5. console.log(data2)

    2-3 createReadStream 流式读取

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

    参数说明:

    path 文件路径

    options 选项配置( 可选 )

    返回值:Object

    代码示例:

    1. const fs = require('fs');
    2. //创建读取流对象
    3. let rs = fs.createReadStream('./music.txt', 'utf-8');
    4. //每次取出 64k 数据后执行一次 data 回调
    5. rs.on('data', data => {
    6. console.log(data);
    7. console.log(data.length);
    8. });
    9. //读取完毕后, 执行 end 回调
    10. rs.on('end', () => {
    11. console.log('读取完成')
    12. })

    2-4 读取文件应用场景

    • 电脑开机
    • 程序运行
    • 编辑器打开文件
    • 查看图片
    • 播放视频
    • 播放音乐
    • Git 查看日志
    • 上传文件
    • 查看聊天记录

    三、文件移动与重命名

    Node.js 中,我们可以使用rename或renameSync来移动或重命名 文件或文件夹

    语法:

    fs.rename(oldPath, newPath, callback)

    fs.renameSync(oldPath, newPath)

    参数说明:

    oldPath 文件当前的路径

    newPath 文件新的路径

    callback 操作后的回调

    代码示例:

    1. const fs = require('fs');
    2. fs.rename('./music.txt', './jay/music.txt', (err) => {
    3. if (err) throw err;
    4. console.log('移动完成')
    5. });
    6. fs.renameSync('./study.txt', './jay/study.txt');

    四、文件删除

    在 Node.js 中,我们可以使用unlink或unlinkSync来删除文件

    语法:

    fs.unlink(path, callback)

    fs.unlinkSync(path)

    参数说明:

    path 文件路径

    callback 操作后的回调

    代码示例:

    1. const fs = require('fs');
    2. fs.unlink('./test.txt', err => {
    3. if (err) throw err;
    4. console.log('删除成功');
    5. });
    6. fs.unlinkSync('./test2.txt');

    五、文件夹操作

    借助 Node.js 的能力,我们可以对文件夹进行 创建、 读取 、删除 等操作

    方法

    说明

    mkdir / mkdirSync

    创建文件夹

    readdir / readdirSync

    读取文件夹

    rmdir / rmdirSync

    删除文件夹

    5-1 mkdir 创建文件夹

    在 Node.js 中,我们可以使用mkdir或mkdirSync来创建文件夹 语法:

    fs.mkdir(path[, options], callback)

    fs.mkdirSync(path[, options])

    参数说明:

    path 文件夹路径

    options 选项配置( 可选 )

    callback 操作后的回调

    示例代码:

    1. const fs = require('fs');
    2. fs.mkdir('./page', err => {
    3. if (err) throw err;
    4. console.log('创建成功');
    5. });
    6. //递归异步创建
    7. fs.mkdir('./1/2/3', { recursive: true }, err => {
    8. if (err) throw err;
    9. console.log('递归创建成功');
    10. });
    11. //递归同步创建文件夹
    12. fs.mkdirSync('./x/y/z', { recursive: true });

    5-2 readdir 读取文件夹

    在 Node.js 中,我们可以使用readdir或readdirSync来读取文件夹 语法:

    fs.readdir(path[, options], callback)

    fs.readdirSync(path[, options])

    参数说明:

    path 文件夹路径

    options 选项配置( 可选 )

    callback 操作后的回调

    示例代码:

    1. const fs = require('fs');
    2. //异步读取
    3. fs.readdir('./jay', (err, data) => {
    4. if (err) throw err;
    5. console.log(data, '异步');
    6. });
    7. //同步读取
    8. let data = fs.readdirSync('./jay');
    9. console.log(data, '同步');

    5-3 rmdir 删除文件夹

    在 Node.js 中,我们可以使用rmdir或rmdirSync来删除文件夹 语法:

    fs.rmdir(path[, options], callback)

    fs.rmdirSync(path[, options])

    参数说明:

    path 文件夹路径

    options 选项配置( 可选 )

    callback 操作后的回调

    示例代码:

    1. const fs = require('fs');
    2. //异步删除文件夹
    3. fs.rmdir('./page', err => {
    4. if (err) throw err;
    5. console.log('删除成功');
    6. });
    7. //异步递归删除文件夹
    8. fs.rmdir('./1', { recursive: true }, err => {
    9. if (err) {
    10. console.log(err);
    11. }
    12. console.log('递归删除')
    13. });
    14. //同步递归删除文件夹
    15. fs.rmdirSync('./x', { recursive: true })

    六、查看资源状态

    在 Node.js 中,我们可以使用stat或statSync来查看资源的详细信息 语法:

    fs.stat(path[, options], callback) fs.statSync(path[, options])

    参数说明:

    path 文件夹路径

    options 选项配置( 可选 )

    callback 操作后的回调

    示例代码:

    1. const fs = require('fs');
    2. //异步获取状态
    3. fs.stat('./data.txt', (err, data) => {
    4. if (err) throw err;
    5. console.log(data, '异步');
    6. });
    7. //同步获取状态
    8. let data = fs.statSync('./data.txt');
    9. console.log(data, '同步');

    结果值对象结构:

    size 文件体积

    birthtime 创建时间

    mtime 最后修改时间

    isFile 检测是否为文件

    isDirectory 检测是否为文件夹

    ....

    七、相对路径问题

    fs 模块对资源进行操作时,路径的写法有两种: 相对路径

    ./music.txt当前目录下的music.txt

    music.txt等效于上面的写法

    ../music.txt当前目录的上一级目录中的座右铭.txt

    绝对路径

    D:/Program Files windows 系统下的绝对路径

    /usr/bin Linux 系统下的绝对路径

    相对路径中所谓的 当前目录 ,指的是 命令行的工作目录 ,而并非是文件的所在目录 所以当命令行的工作目录与文件所在目录不一致时,会出现一些 BUG

    八、__dirname

    __dirname与require类似,都是 Node.js 环境中的'全局'变量

    __dirname保存着 当前文件所在目录的绝对路径 ,可以使用 __dirname 与文件名拼接成绝对路径

    代码示例:

    1. const fs = require('fs')
    2. let data = fs.readFileSync(__dirname + '/data.txt', 'utf-8');
    3. console.log(data);

    使用 fs 模块的时候,尽量使用 __dirname 将路径转化为绝对路径,这样可以避免相对路径产生的 Bug

  • 相关阅读:
    linux的yum 、yum的周边环境
    centos7 添加网卡设置动态ip,修改网卡为任意名称
    线程三连鞭之“线程池”
    抚琴成一快-しゃぼん玉
    【NVMe2.0b 14-5】Firmware Download/Commit command
    Hive基础(DML 数据操作)
    【从零开始学习 SystemVerilog】3.1.3、SystemVerilog 控制流—— for 循环
    行至青鸟 | 为学习保驾护航的“教学管理”
    【面试题】JSON.stringify()妙用,你真的知道吗?
    浅谈长连接负载均衡
  • 原文地址:https://blog.csdn.net/m0_52704461/article/details/133968804