node.js 实战——(fs模块 知识点学习)

fs 模块

也可以称之为文件系统模块,是node中的内置模块,可以实现与硬盘的交互。比如文件的创建、删除、重命名、移动,还有文件内容的写入、读取,以及文件夹的相关操作
fs模块 文件创建 文件写入 文件删除 文件重命名 文件移动 文件夹操作

导入fs模块

javascript 复制代码
const fs = require('fs')

文件写入

writeFile 异步写入

writeFile(file,data,options,callback)

  • file 文件名
  • data 要写入的数据
  • options 设置选项,不是必填项
  • callback 为回调函数,写入成功,返回null
javascript 复制代码
const fs = require("fs");
fs.writeFile('./file/wirte.txt',"你好",(err)=>{
    if(err){
        console.log('写入失败');
        return;
    }
    console.log("写入成功");
})

writeFileSync 同步写入

writeFileSync(file, data, options)

  • file 文件名
  • data 要写入的数据
  • options 设置选项,不是必填项

没有回调函数,执行到这句话是,主线程会停下来等待,直到执行完毕;返回值为undefined

appendFile/appendFileSync 文件追加写入

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

appendFile(file, data, options, callback)

appendFileSync(file, data, options)

javascript 复制代码
fs.appendFile('./file/wirte.txt',"你好!!!",(err)=>{
    if(err){
        console.log('追加失败');
        return;
    }
    console.log("追加成功");
})

注意:writeFile 也可以实现追加,只需要在options 中将 flag 设置为a 即可

javascript 复制代码
fs.writeFile('./file/wirte.txt',"你好",{flag:'a'},(err)=>{
    if(err){
        console.log('写入失败');
        return;
    }
    console.log("写入成功");
})

createWriteStream 流式写入

createWriteStream(path, options)

  • path: 文件路径
  • options 设置选项,不是必填项
javascript 复制代码
const fs = require("fs");

let ws=fs.createWriteStream("./file/2_1.docx");
ws.write("njksdhfdshfjkdhf")
ws.end()

程序打开一个文件是需要消耗资源的 ,流式写入可以减少打开关闭文件的次数。

流式写入方式适用于 大文件写入或者频繁写入 的场景, writeFile 适合于 写入频率较低的场景

文件读取

readFile 异步读取

readFile(path, options, callback)

  • path 文件路径
  • options 设置选项,不是必填项
  • callback 回调函数,有两个参数(err,data)
    err ------失败返回信息,成功返回null
    data------数据,格式为buffer
javascript 复制代码
const fs = require("fs");
fs.readFile("./fileSystem.txt", "utf8", (err, data) => {
    if (err) {
        console.log(err)
    }
    console.log(data)
})

readFIleSync 同步读取

readFileSync(path, options)

  • path 文件路径
  • options 设置选项,不是必填项
javascript 复制代码
let data =fs.readFileSync("./file/2.mov")

createReadStream 流式读取

createReadStream(path, options)

  • path 文件路径
  • options 设置选项,不是必填项

读取文件是一块一块的读取

javascript 复制代码
const fs = require("fs");

let rs=fs.createReadStream("./file/2.mov");
rs.on("data", chunk => {
     //每一次最大读取65536字节,即64kB
})
//读取完毕之后,会触发end事件
rs.on("end", () => {})

文件重名和移动

可以使用 renamerenameSync 来移动或重命名 文件或文件夹

rename(oldPath, newPath, callback)

renameSync(oldPath, newPath)

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

文件删除

使用 unlink/rmunlinkSync/rmSync 来删除文件

unlink/rm(path, callback)

unlinkSync/rmSync(path)

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

文件夹操作

创建文件夹

使用 mkdirmkdirSync 来创建文件夹

mkdir(path, options, callback)

mkdirSync(path, options)

  • path 文件路径
  • options 设置选项,不是必填项
  • callback 回调函数,有1个参数(err)
    err ------失败返回信息,成功返回null
javascript 复制代码
fs.mkdir('./test', err => {
if(err) throw err;
console.log('创建成功');
});
//递归异步创建
fs.mkdir('./test1/2/3', {recursive: true}, err => {
if(err) throw err;
console.log('递归创建成功');
});
//递归同步创建文件夹
fs.mkdirSync('./test/y/z', {recursive: true});

读取文件夹

使用 readdirreaddirSync 来读取文件夹

readdir(path, options, callback)

  • path 文件路径
  • options 设置选项,不是必填项
  • callback 回调函数,两个个参数(err,data)
    err ------失败返回信息,成功返回nul
    data------数据,返回的是列表
javascript 复制代码
fs.readdir('./public', (err, data) => {
if(err) throw err;
console.log(data);
});

删除文件夹

使用 rmdir 或 rmdirSync 来删除文件夹

rmdir(path, options, callback)

  • path 文件路径
  • options 设置选项,不是必填项
  • callback 回调函数,有1个参数(err)
    err ------失败返回信息,成功返回null
javascript 复制代码
fs.rmdir('./test', err => {
if(err) throw err;
console.log('删除成功');
});
//异步递归删除文件夹
fs.rmdir('./test1', {recursive: true}, err => {
if(err) {
console.log(err);
}
console.log('递归删除')
});
//同步递归删除文件夹
fs.rmdirSync('./test', {recursive: true})

__dirname

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

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

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

Bug

相关推荐
三十而立洋1 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁1 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
李少兄1 天前
JavaScript 隐式全局变量解析
javascript
沙蒿同学1 天前
我用 Go 搭了一条 AI Agent 流水线:从 1 张商品图到一整套淘宝详情页
前端·javascript·后端
paopaokaka_luck1 天前
智慧社区综合服务小程序(人脸识别、AI问答、Echarts图形化分析)
前端·javascript·spring boot·spring·数据分析·echarts
Hilaku1 天前
为什么死磕 1px 的团队,用户体验反而更差?
前端·javascript·程序员
陈拉斯1 天前
给公司年会写了个大屏抽奖系统:动画在前端跑,凭什么说结果没被改?
javascript
yzy851 天前
Vue中下载或打开文件的JavaScript方法
前端·javascript·vue
用户298698530141 天前
在 React 中用 JavaScript 将 Word 转换为文本
前端·javascript·react.js
风尘小子1 天前
node.js系列:process配置
前端·node.js