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

相关推荐
墨水白云16 分钟前
nestjs[一文学懂nestjs中对npm功能包的封装,ioredis封装示例]
前端·npm·node.js
低代码布道师18 分钟前
第五部分:第一节 - Node.js 简介与环境:让 JavaScript 走进厨房
开发语言·javascript·node.js
满怀10151 小时前
【Vue 3全栈实战】从响应式原理到企业级架构设计
前端·javascript·vue.js·vue
伟笑1 小时前
elementUI 循环出来的表单,怎么做表单校验?
前端·javascript·elementui
确实菜,真的爱2 小时前
electron进程通信
前端·javascript·electron
魔术师ID3 小时前
vue 指令
前端·javascript·vue.js
Clown954 小时前
Go语言爬虫系列教程 实战项目JS逆向实现CSDN文章导出教程
javascript·爬虫·golang
星空寻流年4 小时前
css3基于伸缩盒模型生成一个小案例
javascript·css·css3
waterHBO6 小时前
直接从图片生成 html
前端·javascript·html
Growthofnotes6 小时前
VSCode中Node.js 使用教程
ide·vscode·node.js