Node学习笔记之fs模块

本文介绍了Node.js中的fs模块,详细讲解了文件写入(包括异步、同步、追加和流式)、文件读取、文件移动与重命名、文件删除、文件夹操作以及查看资源状态的方法。特别强调了使用绝对路径和__dirname变量的重要性。
摘要由CSDN通过智能技术生成

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

代码示例:

// require 是 Node.js 环境中的'全局'变量,用来导入模块

const fs = require('fs');

//将 『css』 写入到当前文件夹下的『study.txt』文件中

fs.writeFile('./study.txt', 'css', err => {
    //如果写入失败,则回调函数调用时,会传入错误对象,如写入成功,会传入 null

    if (err) {
        console.log(err);
        return;
    }
    console.log('写入成功')

});

1-2. writeFileSync 同步写入

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

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

返回值: undefined

代码示例:

const fs = require('fs');
try {
    fs.writeFileSync('./study.txt', 'vue');
} catch (e) {
    console.log(e);
}

1-3. appendFile / appendFileSync 追加写入

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

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

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

返回值:二者都为undefined

实例代码:

const fs = require('fs');
fs.appendFile('./study.txt', 'react', err => {
    if (err) throw err;
    console.log('追加成功')
});

fs.appendFileSync('./study.txt', '\r\nnode');

1-4. createWriteStream 流式写入

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

参数说明:

path 文件路径

options 选项配置( 可选 )

返回值: Object

码示例:

const fs = require('fs');
let ws = fs.createWriteStream('./music.txt');

ws.write('无关风月 我题序等你回\r\n');

ws.write('手中无愧 无惧人间是非\r\n');

ws.write('雨打蕉叶 又萧萧了几夜\r\n');

ws.write('我等春雷 来提醒你爱谁\r\n');

ws.end();

1-5 写入文件的场景

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

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

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

二、文件读取

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

方法

说明

readFile

异步读取

readFileSync

同步读取

createReadStream

流式读取

2-1 readFile 异步读取

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

参数说明:

path 文件路径

options 选项配置

callback 回调函数

返回值:undefined

代码示例:

const fs = require('fs');
fs.readFile('./study.txt', (err, data) => {
    if (err) throw err;
    console.log(data, '111');
});
fs.readFile('./study.txt', 'utf-8', (err, data) => {
    if (err) throw err;
    console.log(data, '222');
});

2-2 readFileSync 同步读取

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

参数说明:

path 文件路径

options 选项配置

返回值:string | Buffer

代码示例:

const fs = require('fs');
let data = fs.readFileSync('./study.txt');

let data2 = fs.readFileSync('./study.txt', 'utf-8');
console.log(data)
console.log(data2)

2-3 createReadStream 流式读取

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

参数说明:

path 文件路径

options 选项配置( 可选 )

返回值:Object

代码示例:

const fs = require('fs');
//创建读取流对象

let rs = fs.createReadStream('./music.txt', 'utf-8');

//每次取出 64k 数据后执行一次 data 回调

rs.on('data', data => {
    console.log(data);
    console.log(data.length);
});

//读取完毕后, 执行 end 回调

rs.on('end', () => {
    console.log('读取完成')
})

2-4 读取文件应用场景

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

三、文件移动与重命名

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

语法:

fs.rename(oldPath, newPath, callback)

fs.renameSync(oldPath, newPath)

参数说明:

oldPath 文件当前的路径

newPath 文件新的路径

callback 操作后的回调

代码示例:

const fs = require('fs');
fs.rename('./music.txt', './jay/music.txt', (err) => {
    if (err) throw err;
    console.log('移动完成')
});

fs.renameSync('./study.txt', './jay/study.txt');

四、文件删除

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

语法:

fs.unlink(path, callback)

fs.unlinkSync(path)

参数说明:

path 文件路径

callback 操作后的回调

代码示例:

const fs = require('fs');

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

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 操作后的回调

示例代码:

const fs = require('fs');
fs.mkdir('./page', err => {
    if (err) throw err;
    console.log('创建成功');
});

//递归异步创建

fs.mkdir('./1/2/3', { recursive: true }, err => {
    if (err) throw err;
    console.log('递归创建成功');
});

//递归同步创建文件夹

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 操作后的回调

示例代码:

const fs = require('fs');
//异步读取

fs.readdir('./jay', (err, data) => {
    if (err) throw err;
    console.log(data, '异步');
});

//同步读取

let data = fs.readdirSync('./jay');

console.log(data, '同步');

5-3 rmdir 删除文件夹

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

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

fs.rmdirSync(path[, options])

参数说明:

path 文件夹路径

options 选项配置( 可选 )

callback 操作后的回调

示例代码:

const fs = require('fs');
//异步删除文件夹

fs.rmdir('./page', err => {
    if (err) throw err;
    console.log('删除成功');
});

//异步递归删除文件夹

fs.rmdir('./1', { recursive: true }, err => {
    if (err) {
        console.log(err);
    }
    console.log('递归删除')
});

//同步递归删除文件夹

fs.rmdirSync('./x', { recursive: true })

六、查看资源状态

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

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

参数说明:

path 文件夹路径

options 选项配置( 可选 )

callback 操作后的回调

示例代码:

const fs = require('fs');
//异步获取状态

fs.stat('./data.txt', (err, data) => {
    if (err) throw err;
    console.log(data, '异步');
});

//同步获取状态

let data = fs.statSync('./data.txt');
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 与文件名拼接成绝对路径

代码示例:

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

console.log(data);

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值