【玩转Node.JS】=>(内置文件系统)fs模块

文章目录

概念:

fs 全称为 file system ,称之为 文件系统 ,是 Node.js 中的 内置模块 ,可以对计算机中的磁盘进行操作

文件写入

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

writeFile (异步写入)

  • 语法
javascript 复制代码
fs.writeFile(file, data[, options], callback)

参数说明:

  • file 写入的文件路径名
  • data 写入的数据
  • options 配置对象设置 (可选)
  • callback 写入回调函数

  • 示例
javascript 复制代码
const fs = require("fs");   /** @导入fs模块 **/

fs.writeFile('./异步创建文件.txt', '给文件中插入一条数据', err => {
    //如果写入失败,则回调函数调用时,会接收一个错误对象,如写入成功,会返回 null
    if (err) {
        console.log('写入失败');
        return;
    }
    console.log('写入成功');
});

writeFileSync(同步写入)

  • 语法
javascript 复制代码
fs.writeFileSync(file, data[, options])

参数说明:

  • file 写入的文件路径名
  • data 待写入的数据
  • options 配置对象设置 (可选)
  • 注明:
    同步写入没有回调函数

  • 示例
javascript 复制代码
const fs = require("fs");   /** @导入fs模块 **/
fs.writeFileSync('./同步创建文件.txt', '一段字符串')

appendFile (异步追加写入)

  • 语法
javascript 复制代码
fs.appendFile(file, data[, options], callback)

参数说明:

  • file 追加写入的文件路径名
  • data 待追加写入的数据
  • options 配置对象设置 (可选)
  • callback 写入回调函数

  • 示例
javascript 复制代码
const fs = require("fs");   /** @导入fs模块 **/

fs.appendFile('./异步创建文件.txt', '异步追加文字', err => {
    if (err) {
        console.log('写入失败');
        return;
    } else {
        console.log('写入成功');
    }
})

appendFileSync(同步追加写入)

  • 语法
javascript 复制代码
fs.appendFileSync(file, data[, options])

参数说明:

  • file 文件名
  • data 待追加写入的数据
  • options 配置对象设置 (可选)
  • 注明:
    同步追加写入没有回调函数

  • 示例:
javascript 复制代码
const fs = require("fs");   /** @导入fs模块 **/
fs.appendFileSync('./同步创建文件.txt', '同步追加一段字符串')

补充

writeFile/writeFileSync 也可以实现追加写入,需要在第三个参数配置对象中写入 {flag:' a '},就可以实现


createWriteStream (文件流式写入)

  • 语法
javascript 复制代码
 fs.createWriteStream(path[, options])

参数说明:

  • path 文件路径
  • options 配置对象( 可选 )

返回值: Object

  • 示例
javascript 复制代码
const fs = require('fs');
let ws = fs.createWriteStream('./观书有感.txt');
ws.write('第一段文字\r\n');
ws.write('第二段文字\r\n');
ws.write('第三段文字\r\n');
ws.write('第四段文字\r\n');
ws.close();   //关闭流式写入

文件写入概括:

方法 描述
writeFile 异步写入
writeFileSync 同步写入
appendFile 异步追加写入
appendFileSync 同步追加写入
createWriteStream 流式写入

文件读取

readFile (异步读取)

  • 语法
javascript 复制代码
fs.readFile(path[, options], callback)

参数说明:

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

示例

javascript 复制代码
const fs = require('fs');
fs.readFile('./新建文件.txt', (err, data) => {
    if (err) {
        console.log("读取失败");
        return;
    } else {
        console.log("读取成功");
        console.log(data.toString());
    }
})

fs.readFile('./新建文件.txt', 'utf-8', (err, data) => {
    if (err) {
        console.log("读取失败");
        return;
    } else {
        console.log("读取成功");
        console.log(data);
    }
})

readFileSync (同步读取)

  • 语法:
javascript 复制代码
fs.readFileSync(path[, options])

参数说明:

  • path 文件路径
  • options 选项配置(可选)

返回值: string | Buffer

示例

javascript 复制代码
const fs = require('fs');
let data = fs.readFileSync('./新建文件.txt');
let data2 = fs.readFileSync('./新建文件.txt', 'utf-8');

createReadStream (文件流式读取)

  • 语法:
javascript 复制代码
fs.createReadStream(path[, options])

参数说明:

  • path 文件路径
  • options 选项配置

返回值: Object

示例:

javascript 复制代码
const fs = require('fs');
//创建读取流对象
let rs = fs.createReadStream('./新建文件.txt');
//每次取出 64k 数据后执行一次 chunk 回调
//绑定 data 事件
rs.on('data', chunk => {
console.log(chunk);
console.log(chunk.length);
});
//读取完毕后, 执行 end 回调,关闭流式读取
rs.on('end', () => {
console.log('读取完成')
})

概述

方法 描述
readFile 异步读取
readFileSync 同步读取
createReadStream 流式读取

复制文件

copyFile (异步复制文件)

复制文件这里的逻辑处理方法,有多种,你可以选择,先调用读取文件,再将读取到的文件调用写入方法,当然也可以直接调用 fs 的复制 Api

javascript 复制代码
fs.copyFile('./散文集.txt', './文件.txt', err => {
    if (err) throw err;
    console.log('复制成功');
});

语法

javascript 复制代码
fs.copyFile(src, dest[, options ], callback)

参数说明:

  • src复制源文件当前的路径
  • newPath 复制创建新文件的路径
  • options 配置参数(可选)
  • callback 操作后的回调

copyFileSync (同步复制文件)

javascript 复制代码
fs.copyFileSync('./散文集.txt', './文件.txt');

参数同异步方法,只是没有回调函数

概述

方法 描述
copyFile 异步复制
copyFileSync 同步复制

文件(夹)移动与重命名

rename(异步/同步重命名/移动)

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

  • 语法
javascript 复制代码
fs.rename(oldPath, newPath, callback);  //异步更改

fs.renameSync(oldPath, newPath);   //同步更改

参数说明:

  • oldPath 文件当前的路径
  • newPath 文件新的路径
  • callback 操作后的回调

示例:

javascript 复制代码
const fs = require('fs');
fs.rename('./新建文件.txt', './资料/新建文件.txt', (err) => {
    if (err) throw err;
    console.log('移动完成')
});
fs.renameSync('./新建文件.txt', './资料/新建文件.txt');

补充当更改地址相对于原地址,处于同一目录,则为重命名,反之修改后不在同一目录,则为移动

概述

方法 描述
rename 异步重命名/移动
renameSync 同步重命名/移动

文件删除

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

参数说明:

  • path 文件路径
  • callback 操作后的回调
javascript 复制代码
fs.rm('./同步创建文件.txt', (err) => {
    if (err) {
        console.log("删除失败");
        return;
    } else {
        console.log("删除成功");
        return;
    }
})

fs.rmSync('./同步创建文件.txt');



fs.unlink('./同步创建文件.txt', (err) => {
    if (err) {
        console.log("删除失败");
        return;
    } else {
        console.log("删除成功");
        return;
    }
})

fs.unlinkSync('./同步创建文件.txt');

概述

方法 描述
rm 异步删除
rmSync 同步删除
unlink 异步删除
unlinkSync 同步删除

文件夹操作

创建文件夹

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

  • 语法
javascript 复制代码
fs.mkdir(path[, options], callback); //异步创建
fs.mkdirSync(path[, options]);   //同步创建

参数说明:

  • path 文件夹路径
  • options 选项配置( 可选 )
  • callback 操作后的回调

示例

javascript 复制代码
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});

读取文件夹

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

  • 语法
javascript 复制代码
fs.readdir(path[, options], callback); //异步读取
fs.readdirSync(path[, options]); //同步读取

参数说明:

  • path 文件夹路径
  • options 选项配置( 可选 )
  • callback 操作后的回调

示例

javascript 复制代码
//异步读取
fs.readdir('./page', (err, data) => {
if(err) throw err;
console.log(data);
});
//同步读取
let data = fs.readdirSync('page');
console.log(data);

删除文件夹

在 Node.js 中,我们可以使用 rmdir rm 来删除文件夹

示例

javascript 复制代码
//异步删除文件夹
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})


//rm异步删除文件夹
fs.rm('./page', err => {
	if(err) throw err;
	console.log('删除成功');
});
//异步递归删除文件夹
fs.rm('./1', {recursive: true}, err => {
	if(err) {
	console.log(err);
}
console.log('递归删除')
});
//同步递归删除文件夹
fs.rmSync('./x', {recursive: true})

注明: 推荐使用 rmrmdir 后续可能将被移除

文件夹操作概括

方法 描述
mkdir 异步创建
mkdirSync 同步创建
readdir 异步读取文件夹
readdirSync 同步读取文件夹
rmdir 异步删除文件夹不推荐使用
rmdirSync 同步删除文件夹不推荐使用
rm 异步删除文件夹:推荐使用
rmSync 同步删除文件夹推荐使用

查看资源状态

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

示例:

javascript 复制代码
//异步获取状态
fs.stat('./data.txt', (err, data) => {
	if(err) throw err;
	console.log(data);
});
//同步获取状态
let data = fs.statSync('./data.txt');

结果值对象结构:

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

__dirname


🚵‍♂️ 博主座右铭:向阳而生,我还在路上!


🚴博主想说:将持续性为社区输出自己的资源,同时也见证自己的进步!


🤼‍♂️ 如果都看到这了,博主希望留下你的足迹!【📂收藏!👍点赞!✍️评论!】


相关推荐
程序猿进阶1 分钟前
堆外内存泄露排查经历
java·jvm·后端·面试·性能优化·oom·内存泄露
FIN技术铺6 分钟前
Spring Boot框架Starter组件整理
java·spring boot·后端
彭世瑜11 分钟前
ts: TypeScript跳过检查/忽略类型检查
前端·javascript·typescript
FØund40411 分钟前
antd form.setFieldsValue问题总结
前端·react.js·typescript·html
Backstroke fish12 分钟前
Token刷新机制
前端·javascript·vue.js·typescript·vue
小五Five13 分钟前
TypeScript项目中Axios的封装
开发语言·前端·javascript
小曲程序13 分钟前
vue3 封装request请求
java·前端·typescript·vue
临枫54114 分钟前
Nuxt3封装网络请求 useFetch & $fetch
前端·javascript·vue.js·typescript
酷酷的威朗普15 分钟前
医院绩效考核系统
javascript·css·vue.js·typescript·node.js·echarts·html5
前端每日三省15 分钟前
面试题-TS(八):什么是装饰器(decorators)?如何在 TypeScript 中使用它们?
开发语言·前端·javascript