您现在的位置是:网站首页> 编程资料编程资料

Node.js 操作本地文件及深入了解fs内置模块_node.js_

2023-05-24 414人已围观

简介 Node.js 操作本地文件及深入了解fs内置模块_node.js_

前言

node.js作为服务端应用,肯定少不了对本地文件的操作,像创建一个目录、创建一个文件、读取文件内容等都是我们开发中经常需要用到的功能

这篇文章我们将深入学习node的内置模块:fs文件操作模块,并使用它来操作本地文件,让我们开始吧!

一、目录操作

创建目录

语法:

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

参数:

  • path - 文件路径
  • options 配置对象,属性有:
    • recursive 是否以递归的方式创建目录(创建嵌套目录),默认为 false
    • mode 设置目录权限,默认为 0777( Windows 不支持
  • callback 回调函数,参数如下:
    • err 错误信息
    • path 仅在options配置recursivetrue时出现,表示所创建的顶层目录的绝对路径

演示:

const fs = require("fs"); // 创建文件夹 fs.mkdir("./blog", (err) => { if (err) { console.log(err); } else { console.log("创建blog目录成功!"); } });

在这里插入图片描述

我们无法直接创建嵌套的目录

在这里插入图片描述

想要创建嵌套目录,需要配置options 对象:

// 创建嵌套文件夹 fs.mkdir("./blog/one", { recursive: true }, (err, path) => { if (err) { console.log(err); } else { console.log("创建blog目录成功!"); console.log("path参数出现", path); } });

在这里插入图片描述

目录重命名

语法:

fs.rename(oldPath, newPath, callback)

参数:

  • oldPath 老的名字
  • newPath 新的名字
  • callback 回调函数,参数如下:
    • err 错误信息

演示:

// 文件夹重命名 fs.rename("./blog", "./newBlog", (err) => { if (err) { console.log(err); } else { console.log("重命名成功!"); } });

在这里插入图片描述

读取目录

语法:

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

参数:

  • path 目录路径
  • options 可以是指定编码格式的字符串,也可以是具有以下属性的对象
    • encoding:指定编码格式,默认值: ‘utf-8
    • withFileTypesfiles数组是否包含 对象,默认值: false
  • callback 回调函数
    • err :错误信息
    • files :目录里的内容,数组格式

演示:

// 读取目录信息 fs.readdir("./newBlog", (err, data) => { if (err) { console.log("err", err); } else { // 数组结构:包含目录下的所有文件名 console.log("data", data); } });

在这里插入图片描述

删除目录

语法:

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

参数:

  • path - 文件路径
  • callback 回调函数,参数如下:
    • err 错误信息

演示:

在这里插入图片描述

注意: 在目录里面有内容时,是无法直接删除该目录的,需要提前将目录下的所有内容给删掉,删除文件会在下面讲到:

在这里插入图片描述

二、文件操作

创建文件

使用fs.writeFile方法创建一个文件并写入内容,如果该文件本来就存在,则会替换文件原本的内容:

// 创建文件并写入内容 // 需要提前有blog目录 fs.writeFile("./blog/one.txt", "hello", (err) => { if (err) { console.log(err); } else { console.log("文件创建成功!"); } });

创建文件:

在这里插入图片描述

创建的内容: 

1600

注意: 使用writeFile时,如要原本没有需要创建的这个文件,则writeFile会新建这个文件并向其中写入指定内容,但如果原本有这个文件,则writeFile会将原本的这个文件内容替换成我们指定的内容

我们可以在循环中批量写入文件

// 批量写入文件 for (let i = 0; i < 10; i++) { fs.writeFile(`./blog/${i}.txt`, `blog-${i}`, (err) => { if (err) { console.log(err); } else { } }); }

在这里插入图片描述

追加文件内容

使用fs.appendFile方法向一个文件内追加内容:

// 给文件追加内容 fs.appendFile("./blog/one.txt", "\nworld", (err) => { if (err) { console.log(err); } else { console.log("内容追加成功!"); } });

上面的代码将在blog目录下的one.txt另起一行追加world的内容,\n表示换行,同时也支持其它的转义符号

在这里插入图片描述

读取文件内容

使用fs.readFile方法读取文件内容:

// 读取文件内容 fs.readFile("./blog/one.txt", (err, data) => { if (err) { console.log(err); } else { console.log(data); } });

在这里插入图片描述

默认读取的内容是nodejsBuffer数组格式,我们可以在获取数据时通过toString将其转化成字符串:

在这里插入图片描述

也可以直接在读取文件时指定读取的编码格式:

在这里插入图片描述

删除文件

使用fs.unlink方法删除文件:

// 删除文件; fs.unlink("./blog/one.txt", (err) => { if (err) { console.log(err); } else { console.log("删除成功!"); } });

在这里插入图片描述

三、 读取文件/目录信息

使用fs.stat可以用来获取指定路径的内容的详细信息,包括文件大小、创建时间等:

// 读取文件/目录信息 fs.stat("./blog/one.txt", (err, stats) => { if (err) { console.log(err); } else { console.log("stats", stats); } });

在这里插入图片描述

回调函数中的stats参数会接收到文件的详细信息对象,其中各个属性表示的含义如下:

Stats { // 包含文件的设备的数值型标识 dev: 641331036, // 描述文件类型和模式的位域 mode: 33206, // 文件的硬链接数量 nlink: 1, // 文件拥有者的数值型用户标识 uid: 0, // 拥有文件的群组的数值型群组标识 gid: 0, // 如果文件表示设备,则为数字设备标识符 rdev: 0, // i/o 操作的文件系统块大小 blksize: 4096, // 文件的文件系统特定的“inode”号 ino: 281474979034994, // 文件的字节大小 size: 12, // 分配给文件的块的数量 blocks: 0, // 指示上次访问此文件的时间戳 atimeMs: 1661836850563.044, // 指示该文件最后一次修改的时间戳 mtimeMs: 1661836850557.057, // 指示文件状态最后一次更改的时间戳 ctimeMs: 1661836850557.057, // 指示此文件创建时间的时间戳 birthtimeMs: 1661836842506.9233, // 表示文件最后一次被访问的时间 atime: 2022-08-30T05:20:50.563Z, // 表示文件最后一次被修改的时间 mtime: 2022-08-30T05:20:50.557Z, // 表示文件状态最后一次被改变的时间 ctime: 2022-08-30T05:20:50.557Z, // 表示文件的创建时间 birthtime: 2022-08-30T05:20:42.507Z }

stats还有如下的常用方法

  • stats.isDirectory() 判断该内容是否是一个目录
  • stats.isFile() 判断该文件是否是一个常规文件

四、同步方法

-六神源码网