fs模块——文件操作

**

> fs模块可以实现与硬盘的交互、例如文件的船舰、删除、重命名、移动、还有文件内容的写入、读取,以及文件夹的相关操作;

**

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

1-1、writeFile异步写入

语法:fs.writeFile(file,data,[,options],callback)

参数说明:

  • file文件名
  • data待写入的数据
  • options选项设置(可选)
  • callback写入回调

返回值:undefined

1-2、writeFileSync同步写入文件

// 需求:
// 新建一个文件,座右铭.txt,写入内容 哈哈哈

// 1、导入fs模块
const fs = require('fs')

// 2、异步写入文件
fs.writeFile('./座右铭','哈哈哈',(err)=>{
    //err写入失败,错误对象  写入成功:null
    if(err){
        console.log('写入失败')
        reuturn
    }
    console.log('写入成功')
})

// 同步写入文件
fs.writeFileSync('./data.txt','test');

1-3、appendFile/appendFileSync追加写入

appendFile作用是在文件尾部追加写入内容,appendFile和writeFile语法完全相同,二者返回值都是undefined

// 异步追加
const fs = require("fs");
fs.appendFile("./座右铭", "\r\n天将降大任于斯人也",(err)=>{
    if(err){
        console.log('文件追加错误', err)
        return
    }
    console.log('文件追加成功')
});
//同步追加
fs.appendFileSync('./data.txt','大漠孤烟直')

//writeFile实现追加
fs.writeFile('./座右铭','长河落日圆',{flag:'a'},(err)=>{
    //err写入失败,错误对象  写入成功:null
    if(err){
        console.log('写入失败')
        reuturn
    }
    console.log('追加成功')
})

1-4、createWriteStream流式写入

语法:fs.createWriteStream(path,[,options])

参数说明:path文件路径;options选项配置(可选)

(程序打开一个文件是需要消耗CPU资源的,流式写入可以减少打开关闭文件的次数,流式写入的方式适合用于大文件或者频繁写入的场景,writeFile适合于写入频率较低的场景)

// 导入fs
const fs = require('fs')
// 创建写入流对象
const ws = fs.createWriteStream('./观书有感.txt')
// 写入
ws.write('半亩方塘一鉴开,\r\n')
ws.write('天光云影共徘徊,\r\n')
ws.write('问渠哪得清如许,\r\n')
ws.write('为有源头活水来,\r\n')

ws.close()

1-5、文件写入的场景

文件写入在计算机中是一个常见的操作,下面的场景都用到了文件的写入,当需要持久化保存数据的时候,应该想到文件写入

  • 下载文件
  • 安装软件
  • 保存日志,如git
  • 编辑器保存文件
  • 视频录制
2、文件的读取

文件读取顾名思义,就是通过程序从文件中读取其中的数据,我们可以使用如下集中方式

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

2-1、readFile异步读取

语法:fs.readFile(lpath[,options],callback)

参数说明:

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

返回值:undefined

// 引入fs模块
const fs = require('fs')
// 异步读取
fs.readFile('./观书有感.txt',(err,data)=>{
    if(err){
        console.log('读取失败',err)
        return
    }
    console.log(data.toString())
})
// 同步读取
let data = fs.readFileSync('./观书有感.txt')
console.log(data.toString())

文件读取应用场景:电脑开机、程序运行、编辑器打开文件、查看图片、播放视频、播放音乐等

2-2、createReadStream流式读取

// 引入fs模块
const fs = require("fs");

// 创建读取流对象
const rs = fs.createReadStream("../笑看风云.mp4");

// 绑定data事件  chunk 块
rs.on("data", (chunk) => {
  console.log(chunk); //一次读取 65536 字节 =>64kb
});

// end可选事件
rs.on("end", () => {
     console.log(读取完成) 
});
3、文件移动与重命名

在node中,我们可以使用rename或renameSync来移动或重命名文件或文件夹;

语法:

fs.rename(oldPath,newPath,callback)

fs.renameSync(oldPath,newPath)

参数说明:

  • oldPath当前文件的路径
  • newPath文件的新路径
  • callback操作后的回调
const fs = require('fs')
fs.rename('./座右铭','./哈哈哈.txt',err=>{
    if(err){
        console.log(err)
        return
    }
    console.log('成功')
})
4、文件删除

在node.js中我们可以使用unlink或unlink来删除文件

语法:

fs.unlink(path,callback)

fs.unlinkSync(path)

参数说明:

  • path 文件路径
  • callback 操作后的回调
const fs = require('fs')

// 异步删除
fs.unlink('./test2.mp4',(err)=>{
    if(err){
        console.log(err)
        return
    }
    console.log('删除成功')
})
// 同步删除
fs.unlinkSync('./test2.mp4')

// Node14引入 rm方法
fs.rm('./test2.mp4',(err)=>{
    if(err){
        console.log(err)
    }
    console.log('删除成功')
})
// 同步删除
fs.rmSync('./test2.mp4')
5、文件夹操作

借助Node.js的能力,看我们可以对文件夹进行创建、读取、删除等操作

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

5-1、在node中我们可以mkdir/mkdirSync来创建文件夹

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

fs.mkdirSync(path,[,options])

参数说明:

  • path文件夹路径
  • options 选项配置
  • callback 操作后的回调
const fs = require("fs");
// 创建文件夹
fs.mkdir('./html',(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.readdir('./',(err,data)=>{
    if(err){
        console.log(err)
        return
    }
    console.log(data)
});

// 删除文件夹
fs.rmdir("./html", (err) => {
  if (err) {
    console.log(err);
    return;
  }
  console.log("删除成功");
});

//递归删除
fs.rmdir("./a", { recursive: true }, () => {
  if (err) {
    console.log(err);
    return;
  }
  console.log("删除成功");
});

// 建议使用
fs.rm("./a", { recursive: true }, () => {
  if (err) {
    console.log(err);
    return;
  }
  console.log("删除成功");
});

6、查看资源状态

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

语法:

fs.stat(path[,option],callback)

fs.statSync(path,[,options])

参数说明:

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

结果值对象结构:

  • size 文件体积
  • birthime 创建时间
  • mtime 最后修改的时间
  • isFile 检查是否为文件
  • isDirectory 检测是否为文件夹
  • atime 最后访问时间
  • ctime 最后修改文件状态时间
const fs = require('fs')
fs.stat('./test.mp4',(err,data)=>{
    if(err){
        console.log(err)
        return
    }
    console.log(data)
    console.log(data.isFile())//是否为一个文件
    console.log(data.isDirectory())//是否为一个文件夹
})
7、相对路径问题

fs模块对资源进行操作时,路径的写法有两种

相对路径

  • ./哈哈哈.txt 当前目录下的文件
  • 哈哈哈.txt 等效上面写法
  • …/哈哈哈.txt 当前目录上一层级中的座右铭

绝对路径

  • D://Program File Windows系统下的绝对路径
  • /usr/bin Linux系统下的绝对路径

相对路径中所谓的当前目录,指的是命令行的工作目录,而并非是文件所在目录 所以当前命令行的工作目录与文件所在目录不一致时,会出现一些BUG

8、__dirname

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

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

代码示例:

let data = fs.readFile(__dirname + './data.txt')

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

9、path模块

path模块提供了操作路径的功能,几个常用API

API说明
path.resolve拼接规范的绝对路径
path.sep获取操作系统的路径分隔符
path.parse解析路径并返回对象
path.basename获取路径的基础名称
path.dirname获取路径的目录名
path.extname获取路径的扩展名
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值