当前位置: 首页 > article >正文

Node fs模块

文章目录

  • Node fs模块
    • 概述
    • 文件写入
      • writeFile 异步写入
      • writeFileSync 同步写入
      • appendFile / appendFileSync 追加写入
      • createWriteStream 流式写入
    • 文件读取
      • readFile 异步读取
      • readFileSync 同步读取
      • createReadStream 流式读取
    • 文件移动和重命名
      • rename 移动或重命名
      • renameSync 同步移动或重命名
    • 文件删除
      • unlink 删除文件
    • 文件夹操作
      • mkdir 创建文件夹
      • readdir 读取文件夹内容
      • rmdir 删除文件夹
    • 查看资源状态
      • isFile() & isDirectory()
    • 文件批量重命名
    • 文件复制操作

Node fs模块

概述

fs(file system)文件系统,是Node.js的内置模块,可以对计算机中的磁盘机械能操作。

文件写入

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

文件写入方法说明
writeFile异步写入
writeFileSync同步写入
appendFile / appendFileSync追加写入
createWriteStream流式写入

writeFile 异步写入

语法

fs.writeFile(file, data, callback)

参数说明

  • file:文件路径。
  • data:写入到内容。
  • callback:结果回调。

使用

const fs = require("fs");

fs.writeFile("./test.txt", "hello 哈喽", (err) => {
  if (err) {
    console.log(err);
    return;
  }
  console.log("写入成功");
});

writeFileSync 同步写入

语法

fs.writeFileSync(file, data)

使用

try {
  fs.writeFileSync("./test.txt", "hello 哈喽");
  console.log("写入成功");
} catch (e) {
  console.log(e);
}

appendFile / appendFileSync 追加写入

语法

fs.appendFile(file, data, callback)
fs.appendFileSync(file, data)

使用

fs.appendFile("./test.txt", "hello world", (err) => {
  if (err) {
    console.log(err);
    return;
  }
  console.log("追加成功");
});
fs.appendFileSync("./test.txt", "hello node");

createWriteStream 流式写入

程序打开一个文件是需要消耗资源的,writeFile适合写入频率较低的情况,createWriteStream适合大文件写入和写入频率较高的情况。

语法

fs.createWriteStream(path)

参数说明

  • path:文件路径。

使用

let ws = fs.createWriteStream("./前端学习");
ws.write("HTML\n");
ws.write("CSS\n");
ws.write("JavaScript\n");
ws.write("Vue\n");
ws.end();

文件读取

从文件中读取数据。

文件读取方法说明
readFile异步读取
readFileSync同步读取
createReadStream流式读取

readFile 异步读取

语法

fs.readFile(path, callback)

参数说明

  • path:文件路径。
  • callback:回调函数。

使用

const fs = require("fs");

fs.readFile("./test.txt", (err, data) => {
  if (err) {
    console.log(err);
    return;
  }
  console.log(data.toString()); //hello 哈喽
});
fs.readFile("./test.txt", "utf-8", (err, data) => {
  if (err) {
    console.log(err);
    return;
  }
  console.log(data.toString()); //hello 哈喽
});

readFileSync 同步读取

语法

fs.readFileSync(path)

参数说明

  • path:文件路径。
  • 返回值为string或Buffer。

使用

let data = fs.readFileSync("./test.txt", "utf-8");
console.log(data); //hello 哈喽
let data = fs.readFileSync("./test.txt");
console.log(data); //<Buffer 68 65 6c 6c 6f 20 e5 93 88 e5 96 bd>

createReadStream 流式读取

语法

fs.createReadStream(path)

参数说明

  • path:文件路径。
  • 返回值为object。

使用

let rs = fs.createReadStream("./test.txt");

// 监听读取中,每次读取64k数据
rs.on("data", (data) => {
  console.log(data);
  console.log(data.length);
});

// 监听读取完成,完成后执行回调
rs.on("end", () => {
  console.log("读取完成");
});

文件移动和重命名

方法说明
rename异步移动或重命名文件和文件夹
renameSync同步移动或重命名文件和文件夹

rename 移动或重命名

语法

fs.rename(oldPath, newPath, callback)

参数说明

  • oldPath:旧文件路径。
  • newPath:新文件路径。
  • callback:操作后的回调。

使用

如果涉及到文件夹,需要保证文件夹的存在,否则操作会

fs.rename("./test.txt", "./a/test2.txt", (err) => {
  if (err) {
    console.log(err);
    return;
  }
  console.log("移动成功");
});

renameSync 同步移动或重命名

fs.renameSync("./test.txt", "./a/test2.txt");

文件删除

方法说明
unlink异步删除文件
unlickSync同步删除文件

unlink 删除文件

语法

fs.unlink(path, callback)

参数说明

  • path:文件路径。
  • callback:操作后的回调。

使用

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

文件夹操作

方法说明
mkdir / mkdirSync创建文件夹
readdir / readdirSync读取文件夹内容
rmdir / rmdirSync删除文件夹

mkdir 创建文件夹

语法

fs.mkdir(path, options, callback)

参数说明

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

使用

// 创建单个文件夹
fs.mkdir("./a", (err) => {
  if (err) {
    console.log(err);
    return;
  }
  console.log("创建成功");
});
// 创建多级文件夹
fs.mkdir("./a/b/c", { recursive: true }, (err) => {
  if (err) {
    console.log(err);
    return;
  }
  console.log("创建成功");
});
// 同步创建多级文件夹
fs.mkdirSync("./a/b/c", { recursive: true });

readdir 读取文件夹内容

语法

fs.readdir(path, callback)

参数说明

  • path:文件夹路径。
  • callback:操作后的回调。

使用

// 读取文件夹中的内容
fs.readdir("./a", (err, data) => {
  if (err) {
    console.log(err);
    return;
  }
  console.log(data); //[ 'b', 'c', 'test1.txt', 'test2.txt' ]
});
// 同步读取文件里的内容
let arr = fs.readdirSync("./a");
console.log(arr); //[ 'b', 'c', 'test1.txt', 'test2.txt' ]

rmdir 删除文件夹

语法

fs.rmdir(path, options, callback)

参数说明

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

使用

// 删除文件夹,只能删除空文件夹
fs.rmdir("./a", (err) => {
  if (err) {
    console.log(err);
    return;
  }
  console.log("删除成功");
});
// 递归删除文件夹
fs.rmdir("./a", { recursive: true }, (err) => {
  if (err) {
    console.log(err);
    return;
  }
  console.log("删除成功");
});
// 同步递归删除文件夹
fs.rmdirSync("./a", { recursive: true });

查看资源状态

语法

fs.stat(path, callback)

参数说明

  • path:文件路径。
  • callback:操作后的回调。

使用

// 获取文件信息
fs.stat("./test.txt", (err, data) => {
  if (err) {
    console.log(err);
    return;
  }
  console.log(data);
});

// Stats {
//   dev: 2823837299,
//   mode: 33206,
//   nlink: 1,
//   uid: 0,
//   gid: 0,
//   rdev: 0,
//   blksize: 4096,
//   ino: 1407374885128710,
//   size: 11,
//   blocks: 0,
//   atimeMs: 1681185331790.6975,
//   mtimeMs: 1681185330730.9456,
//   ctimeMs: 1681185330730.9456,
//   birthtimeMs: 1681185292801.0833,
//   atime: 2023-04-11T03:55:31.791Z,
//   mtime: 2023-04-11T03:55:30.731Z,
//   ctime: 2023-04-11T03:55:30.731Z,
//   birthtime: 2023-04-11T03:54:52.801Z
// }
// 同步获取文件信息
let data = fs.statSync("./test.txt");

isFile() & isDirectory()

isFile() 是否为文件。

isDirectory() 是否为文件夹。

let data = fs.statSync("./test.txt");
console.log(data.isFile()); //true
console.log(data.isDirectory()); //false

文件批量重命名

const fs = require("fs");

let files = fs.readdirSync("./a");
files.forEach((value, index) => {
  let newName = index + "-" + value;
  fs.renameSync("./a/" + value, "./a/" + newName);
});

文件复制操作

方式一:readFileSync & writeFileSync

const fs = require("fs");

let data = fs.readFileSync("./a.pdf");
fs.writeFileSync("./b.pdf", data);

方式二:createReadStream & createWriteStream

const fs = require("fs");

let rs = fs.createReadStream("./a.pdf");
let ws = fs.createWriteStream("./b.pdf");
rs.pipe(ws);
// 上面等价于如下:
let rs = fs.createReadStream("./a.pdf");
let ws = fs.createWriteStream("./b.pdf");
rs.on("data", (data) => {
  ws.write(data);
});
rs.on("end", () => {
  ws.end();
});

http://www.kler.cn/news/11683.html

相关文章:

  • 一个lapack网页 dstedc DSYTRD cusolverDnCheevd
  • Java开发 - 公共字段的自动填充
  • 第十四天本地锁、Redis分布锁、Redisson锁三者的区别
  • 什么是MVVM?
  • Kafka是如何支持百万级TPS的?
  • Pandas2.0它来了,这些新功能你知道多少?
  • 冥想第七十六十三天
  • 使用Go语言打造轻量级Web框架
  • 【学习笔记】Linux基础
  • 【排序】【二分】【角度制】个人练习-Leetcode-1610. Maximum Number of Visible Points
  • 【高危】Apache Linkis <1.3.2 存在反序列化漏洞(CVE-2023-29216)
  • 初识C语言————3
  • Vue3——一文入门Vue3
  • Python圈的普罗米修斯——一套近乎完善的监控系统
  • 「SQL面试题库」 No_34 连续空余座位
  • Python的并发编程-3
  • nginx
  • js 身份证最后一位计算
  • SQL——多表连接查询
  • 一种供水系统物联网监测系统
  • ROS1学习笔记:常用可视化工具的使用(ubuntu20.04)
  • 【LeetCode: 剑指 Offer II 112. 最长递增路径 | 递归 | DFS | 深度优先遍历 | 记忆化缓存表】
  • Java——矩形覆盖
  • Flowable开源版和Flowable商业版有什么区别?
  • TCP网络连接的书写
  • 【MySQL面试题小结2023】
  • Linux文件权限
  • 借助Nacos配置中心实现一个动态线程池
  • 旅游酒店住宿
  • CF55D-Beautiful numbers (数位dp)