欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 社会 > NodeJs之fs模块

NodeJs之fs模块

2025/3/25 21:57:20 来源:https://blog.csdn.net/Y1914960928/article/details/146476559  浏览:    关键词:NodeJs之fs模块

一、定义:

fs 模块可以实现与硬盘的交互。例如:文件的创建、删除、重命名、移动;文件内容的写入、读取;文件夹的操作。

二、引入 fs 模块:

const fs = require('fs')

三、文件写入:

1、异步写入:writeFile

① 语法:

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

② 参数说明:

(1)file:指定目标文件的路径或标识符。

类型:字符串、BufferURL 或文件描述符(整数)

如果路径中没有该文件,则会创建一个文件;如果路径中有该文件,默认会重写文件中的内容。

(2)data:待写入的数据。

类型:字符串、BufferTypedArrayDataView

(3)options:配置项(可选)

类型:字符串(仅编码格式)或对象(包含多个配置项)
常用属性:
encoding

  • 默认值:utf8
  • 作用:指定文本数据的编码格式,支持 asciibase64hex

flag

  • 默认值:w(覆盖写入,文件不存在则创建)
  • 其它值:
    a:追加内容(文件不存在则创建)
    wx:写入失败(若文件已存在)
(4)callback:回调函数。

写入完成后调用,会接收一个参数,写入成功,该参数为 null;写入失败,该参数为 错误对象

③ 示例:

const fs = require('fs')
// 写入文件时建立连接,写入完毕断开连接
fs.writeFile("./fs1.txt", "异步文件写入的内容", err => {if (err) {console.log('写入失败:' + err)return}console.log('写入成功')
})

④ 使用场景:

适用于写入频次较低的场景

2、同步写入:writeFileSync

① 语法:
fs.writeFileSync(file,data[, options])
② 参数说明:
(1)file:指定目标文件的路径或标识符。

类型:字符串、BufferURL 或文件描述符(整数)

如果路径中没有该文件,则会创建一个文件;如果路径中有该文件,默认会重写文件中的内容。

(2)data:待写入的数据。

类型:字符串、BufferTypedArrayDataView

(3)options:配置项(可选)

类型:字符串(仅编码格式)或对象(包含多个配置项)
常用属性:
encoding

  • 默认值:utf8
  • 作用:指定文本数据的编码格式,支持 asciibase64hex

flag

  • 默认值:w(覆盖写入,文件不存在则创建)
  • 其它值:
    a:追加内容(文件不存在则创建)
    wx:写入失败(若文件已存在)
(3)示例:
const fs = require('fs')
fs.writeFileSync("./fs2.txt", "同步文件写入的内容")

3、异步追加写入:

appendFile

(1)语法:
fs.appendFile(path,data[, options], callback)
(2)参数说明:
a、path:文件名(所在的路径)。

类型:字符串、BufferURL 或文件描述符(整数)

如果路径中没有该文件,则会创建一个文件;如果路径中有该文件,默认会重写文件中的内容。

b、data:待写入的数据。

类型:字符串、Buffer
\r\n 表示换行

c、options:配置项(可选)

类型:字符串(仅编码格式)或对象(包含多个配置项)
常用属性:
encoding

  • 默认值:utf8
  • 作用:指定文本数据的编码格式,支持 asciibase64hex

flag

  • 默认值:a(追加模式,文件不存在则创建)
  • 其它值:
    a+:追加且可读
    wx:文件存在时报错
d、callback:回调函数。

写入完成后调用,会接收一个参数,写入成功,该参数为 null;写入失败,该参数为 错误对象

(3)示例:
const fs = require('fs')
fs.appendFile("./fs3.txt", "\r\n文件追加的内容", err => {if (err) {console.log('追加写入失败:'+err)return}console.log('追加写入成功')
})

writeFile

const fs = require('fs')
fs.writeFile("./fs3.txt", "配置文件追加写入---love",{flag: 'a'
}, err => {if (err) {console.log('追加写入失败:'+err)return}console.log('追加写入成功')
})

4、同步追加写入:appendFileSync

① 语法:

fs.appendFileSync(file,data[, options])

② 参数说明:

a、path:文件名(所在的路径)。

类型:字符串、BufferURL 或文件描述符(整数)

如果路径中没有该文件,则会创建一个文件;如果路径中有该文件,默认会重写文件中的内容。

b、data:待写入的数据。

类型:字符串、Buffer
\r\n 表示换行

c、options:配置项(可选)

类型:字符串(仅编码格式)或对象(包含多个配置项)
常用属性:
encoding

  • 默认值:utf8
  • 作用:指定文本数据的编码格式,支持 asciibase64hex

flag

  • 默认值:a(追加模式,文件不存在则创建)
  • 其它值:
    a+:追加且可读
    wx:文件存在时报错

③ 示例:

const fs = require('fs')
fs.appendFileSync("./fs3.txt", "\r\n文件同步内容")

5、流式写入:createWriteStream

① 语法:

fs.createWriteStream(path[, options])

② 参数说明:

(1)path:文件名(所在的路径)。

类型:字符串、BufferURL 或文件描述符(整数)

如果路径中没有该文件,则会创建一个文件;如果路径中有该文件,默认会重写文件中的内容。

(2)options:配置项(可选)

类型:字符串(仅编码格式)或对象(包含多个配置项)

常用属性:

encoding

  • 默认值:utf8
  • 作用:指定文本数据的编码格式,支持 asciibase64hex

flags

  • 默认值:w(覆盖写入,文件不存在则创建)
  • 其它值:
    a:追加内容到文件末尾
    r+:修改文件内容(非覆盖),需配合 start 参数指定写入位置
    wx:文件存在时报错

autoClose

  • 默认值:true(自动关闭文件描述符)。
  • 作用:若设为 false,需手动调用 close() 关闭流

start

  • 作用:指定写入起始位置(字节偏移量),需在 r+'模式下生效

emitClose

  • 默认值:false(不触发 close 事件)。
  • 作用:设为 true 时,流销毁后会触发 close 事件

③ 返回值:

Object

④ 示例:

const fs = require('fs')
// 创建文件写入流对象,和文件建立连接
let ws = fs.createWriteStream("./fs4.txt")
// 写入内容,和文件不会断开连接
ws.write('春眠不觉晓\r\n')
ws.write('处处闻啼鸟\r\n')
ws.write('夜来风雨声\r\n')
ws.write('花落知多少\r\n')
// 断开连接 -- 可选,当脚本文件执行完毕后,资源会被回收,通道也会被断开。
ws.close()

⑤ 使用场景:

适用于大文件写入或者写入频次较高的场景

四、文件读取:

1、异步读取:fs.readFile

① 语法:

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

② 参数说明:

(1)path:指定目标文件的路径或标识符。

类型:字符串、BufferURL 或文件描述符(整数)

(2)options:配置项(可选)

类型:字符串(仅编码格式)或对象(包含多个配置项)
常用属性:
encoding

  • 默认值:null(返回原始 Buffer 数据)
  • 作用:指定文本内容的编码格式 ,可选值是 utf8asciibase64

flag

  • 默认值:r(以只读模式打开文件)
  • 其它值:
    w:覆盖文件(文件不存在则创建)
    a:追加内容(文件不存在则创建)
(3)callback:回调函数。

读取完成后调用,会接收两个参数。
参数1:写入成功,该参数为 null;写入失败,该参数为 错误对象
参数2:写入文件的内容

③ 示例:

const fs = require('fs')
fs.readFile('./fs5.txt', (err,data) => {if (err) {console.log('文件读取失败')return}// console.log(data)console.log(data.toString())
})

2、同步读取:fs.readFileSync

① 语法:

fs.readFileSync(path[, options])

② 参数说明:

(1)path:指定目标文件的路径或标识符。

类型:字符串、BufferURL 或文件描述符(整数)

若路径错误(如文件不存在或权限不足),会抛出 ENOENT 错误

(2)options:配置项(可选)

类型:字符串(仅编码格式)或对象(包含多个配置项)
常用属性:
encoding

  • 默认值:null(返回原始 Buffer 数据)
  • 作用:指定文本内容的编码格式 ,可选值是 utf8asciibase64

flag

  • 默认值:r(以只读模式打开文件)
  • 其它值:
    r+:读写模式
    a:追加模式

③ 示例:

const fs = require('fs')
let data = fs.readFileSync('./fs5.txt')
console.log(data.toString())

3、流式读取:fs.createReadStream

① 语法:

fs.createReadStream(path[, options])

② 参数说明:

(1)path:文件名(所在的路径)。

类型:字符串、BufferURL 或文件描述符(整数)

若路径错误(如文件不存在或权限不足),会抛出 ENOENT 错误

(2)options:配置项(可选)

类型:字符串(仅编码格式)或对象(包含多个配置项)

常用属性:

encoding

  • 默认值:null,返回 Buffer
  • 作用:指定数据编码格式,支持 utf8asciibase64hex

flags

  • 默认值:r(只读模式)
  • 其它值:
    a:追加内容到文件末尾
    r+:读写
    wx:文件存在时报错

autoClose

  • 默认值:true(自动关闭文件描述符)。
  • 作用:若设为 false,需手动调用 close() 关闭流

start

  • 作用:读取起始字节位置(含)

end

  • 作用:读取结束字节位置(含)。若未指定 start,默认从文件头开始读取

③ 返回值:

Object

④ 示例:

const fs = require('fs')
// let rs = fs.createReadStream('./fs5.txt')
let rs = fs.createReadStream('./resource/food.mp4')
rs.on('data', chunk => { // 分块读取,每个块的最大容量为 65536字节 = 64KB// console.log(chunk) console.log(chunk.length)
})rs.on('end', () => {console.log('读取完毕')
})

五、文件复制:

1、全文件操作:

const fs = require('fs')
let fileData = fs.readFileSync('./resource/food.mp4')
fs.writeFile('./resource/food2.mp4',fileData, err => {if (err) {console.log(`文件复制失败--${err}`)return}console.log(`文件复制成功`)
})

2、流式文件操作:

const fs = require('fs')
const process = require('process')
let rs = fs.createReadStream("./resource/food.mp4")
let ws = fs.createWriteStream("./resource/food3.mp4")
// 方式一:
rs.on('data', chunk => {ws.write(chunk)
})
rs.on('end', () => {console.log(process.memoryUsage()) // { rss: 31657984, heapTotal: 5791744, heapUsed: 3381216,external: 10385147,arrayBuffers: 9269529 }console.log(`文件复制完毕,代码内存占用量:${process.memoryUsage().rss}`) // rss  31830016 = 30MB
})
// 方式二:
rs.pipe(ws)

六、文件的重命名与移动:

1、文件的重命名:

① 异步重命名:fs.rename

(1) 语法:
fs.rename(oldpath, newpath, callback)
(2) 参数说明:
a、oldpath:指定需重命名或移动的原始文件/目录路径。

类型:字符串、BufferURL 或文件描述符(整数)

若路径不存在或权限不足,回调函数会返回 ENOENTEPERM 错误

b、newpath:指定目标文件/目录的新路径或名称。

类型:字符串、BufferURL 或文件描述符(整数)

newPath 已存在且为文件:直接覆盖原文件
newPath 为目录:抛出 EISDIR 错误
路径要求:目标路径的父目录必须存在,否则抛出 ENOENT 错误

c、callback:操作完成后的回调函数。

完成后调用,会接收一个参数,写入成功,该参数为 null;写入失败,该参数为 错误对象

(3) 示例:
const fs = require('fs')
fs.rename('./fs5.txt', './红楼梦.txt', err => {if (err) {console.log('文件重命名失败')return}console.log('文件重命名成功')
})

② 同步重命名:

(1) 语法:
fs.renameSync(oldpath, newpath)
(2) 参数说明:
a、oldpath:指定需重命名或移动的原始文件/目录路径。

类型:字符串、BufferURL 或文件描述符(整数)

若路径不存在或权限不足,回调函数会返回 ENOENTEPERM 错误

b、newpath:指定目标文件/目录的新路径或名称。

类型:字符串、BufferURL 或文件描述符(整数)

newPath 已存在且为文件:直接覆盖原文件
newPath 为目录:抛出 EISDIR 错误
路径要求:目标路径的父目录必须存在,否则抛出 ENOENT 错误

(3) 示例:
const fs = require('fs')
fs.renameSync('./resource/food2.mp4', './food.mp4')

2、文件的移动:

移动和重命名一样,只是改变了文件的路径

七、文件删除:

八、文件夹操作:

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词