Node.js — fs 读取 写入

35 阅读3分钟

fs - file system 文件系统的缩写

fs模块可以实现与硬盘的交互

例如文件的创建、删除、重命名、移动、文件内容的写入、读取以及文件夹的相关操作

fs 文件写入 几种方式

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

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

参数说明:

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

代码示例:

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

// 将文本 '第一个内容' 写入到当前文件夹下的写入内容.txt文件中
fs.writeFile('./写入内容.txt','写入的第一个内容',(err)=>{
    //如果写入失败,则回调函数调用会返回错误对象,如写入成功会返回null
    if(err){
        console.log(err);
        return
    }
    console.log('写入成功');
})
writeFileSync 同步写入

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

参数说明:

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

代码示例:

//1. 导入fs模块 
const fs = require('fs')
//同步写入
fs.writeFileSync('./data.txt','test')
appendFile/appendFileSync 异步追加写入 同步追加写入

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

参数说明:

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

代码示例:

//1. 导入fs模块 
const fs = require('fs')
//异步追加写入 appendFile
fs.appendFile('./写入内容.txt','追加一个1111',err=>{
    //如果追加失败,则回调函数调用会返回错误对象,如追加成功会返回null
    if(err){
        console.log(err);
        return
    }
    console.log('追加成功');
})

//同步追加 换行\r\n
fs.appendFileSync('./写入内容.txt','\r\n追加一个1111')
createWriteStream 流式写入

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

参数说明:

  • path 文件路径
  • options 选项设置(可选)

代码示例:

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

//2.创建写入流对象
const ws = fs.createWriteStream('./观树有感.txt')

//3. write
ws.write('半亩方塘一鉴开\r\n')
ws.write('天光云影共徘徊\r\n')
ws.write('问渠那得清如许\r\n')
ws.write('为有源头活水来\r\n')

//4. 关闭通道
ws.close()

场景使用

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

文件写入场景

文件写入在计算机中是一个非常常见的操作,下面场景都用到了文件写入

  • 下载文件
  • 安装软件
  • 保存程序日志 如 Git
  • 编辑器保存文件
  • 视频录制

当需要持久化保存数据的时候,应该想到文件写入

文件读取

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

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

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

参数说明:

  • path 文件路径
  • options 选项设置(可选)
  • callback 回调函数

代码示例:

//1. 导入fs模块 
const fs = require('fs')
//异步读取
fs.readFile('./观树有感.txt',(err,data)=>{
        if(err){
        console.log(err);
        return
    }
    console.log('读取成功',data.toString());
})
readFileSync 同步读取

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

参数说明:

  • path 文件路径
  • options 选项设置(可选)

代码示例:

//1. 导入fs模块 
const fs = require('fs')
// 同步读取
let data = fs.readFileSync('./观树有感.txt')
console.log(data.toString());
createReadStream 流式读取

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

参数说明:

  • path 文件路径
  • options 选项设置(可选)

代码示例:

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

//2.流式读取
const rs = fs.createReadStream('./观树有感.txt')

//3.绑定data事件
rs.on('data',chunk=>{
    console.log(chunk.toString());
})
//4.end 可选
rs.on('end',()=>{
    console.log('读取完成');
})
文件读取场景
  • 电脑开机
  • 程序运行
  • 编辑器打开文件
  • 查看图片
  • 播放音乐
  • 播放视频
  • Git查看日志
  • 上传文件
  • 查看聊天记录