玩命加载中🤣🤣🤣

NodeJs-01-基础内置模块


NodeJs-01-基础内置模块

fs模块

import fs from 'fs'

const fs = require('fs')

文件写入

  1. writeFile 异步写入
/**
 * 参数说明:
 * 1. 文件路径
 * 2. 写入的内容
 * 3. 回调函数,参数err表示错误信息, 并且回调函数是异步执行的, 不会阻塞后续代码的执行, 当写入操作完成后才会调用回调函数
 */
fs.writeFile('./test.txt', 'hello world', (err) => {
  if (err) {
    console.error('写入文件失败', err)
    return
  }
  console.log('写入文件成功')
})
  1. writeFileSync 同步写入
/**
 * 参数说明:
 * 1. 文件路径
 * 2. 写入的内容
 * 3. 可选参数,配置对象
 */
try {
  fs.writeFileSync('./test-sync.txt', 'hello sync world')
  console.log('同步写入文件成功')
} catch (err) {
  console.error('同步写入文件失败', err)
}
  1. appendFile / appendFileSync 追加写入

    在尾部添加内容

/**
 * 参数说明:
 * 1. 文件路径
 * 2. 追加的内容
 * 3. 回调函数,参数err表示错误信息
 *  注意:如果文件不存在,appendFile会创建新文件并写入内容
 */
fs.appendFile('./test.txt', '\nAppended content1', (err) => {
  if (err) {
    console.error('追加文件失败', err)
    return
  }
  console.log('追加文件成功')
})
/**
 * 参数说明:
 * 1. 文件路径
 * 2. 追加的内容
 * 3. 可选参数,配置对象
 * 注意:如果文件不存在,appendFileSync会创建新文件并写入内容
 */
try {
  fs.appendFileSync('./test-sync.txt', '\nAppended sync content1')
  console.log('同步追加文件成功')
} catch (err) {
  console.error('同步追加文件失败', err)
}
  1. createWriteStream 流式写入

    适用于频繁写入的操作

/**
 * 创建一个可写流,用于向文件中写入数据
 * 参数说明:
 * 1. 文件路径
 * 2. 可选参数,配置对象
 * 返回值:返回一个Writable流对象
 */
const writeStream = fs.createWriteStream('./stream.txt')
writeStream.write('First line\n')
writeStream.write('Second line\n')
writeStream.end('End of stream\n')

文件读取

  1. readFile 异步读取
/**
 * 参数说明:
 * 1. 文件路径
 * 2. 可选参数,指定文件编码格式
 * 3. 回调函数,参数err表示错误信息,data表示读取到的文件内容
 */
fs.readFile('./stream.txt', 'utf-8', (err, data) => {
  if (err) {
    console.error('读取文件失败', err)
    return
  }
  console.log('读取文件成功,内容如下:')
  console.log(data)
})
  1. readFileSync 同步读取
/**
 * 参数说明:
 * 1. 文件路径
 * 2. 可选参数,指定文件编码格式
 * 返回值:读取到的文件内容
 * 注意:同步读取文件会阻塞后续代码执行,建议在不影响用户体验的场景下使用
 */
try {
  const data = fs.readFileSync('./stream.txt', 'utf-8')
  console.log('同步读取文件成功,内容如下:')
  console.log(data)
} catch (err) {
  console.error('同步读取文件失败', err)
}
  1. createReadStream 流式读取

    流式读取可以自己控制块数据大小,因此这里做一个实例,源文件内容如下

First line
Second line
End of stream
读取代码
/**
 * 参数说明:
 * 1. 文件路径
 * 2. 可选参数,配置对象
 * 返回值:可读流对象
 * 注意:使用流的方式读取大文件时,可以有效节省内存占用
 *      通过监听流的data事件,可以逐块读取文件内容
 *      通过监听流的end事件,可以在文件读取完毕后执行相应操作
 *      通过监听流的error事件,可以捕获读取过程中的错误
 */
const rs = fs.createReadStream('./stream.txt', {
  highWaterMark: 16 // 每次读取16字节
})
rs.on('data', chunk => {
  console.log('读取到数据块:', chunk.toString())
  console.log('数据块大小:', chunk.length)
})
rs.on('end', () => {
  console.log('文件读取完毕')
})
rs.on('error', err => {
  console.error('读取文件出错', err)
})

控制台

读取到数据块: First line
Secon
数据块大小: 16
读取到数据块: d line
End of st
数据块大小: 16
读取到数据块: ream

数据块大小: 5
文件读取完毕

文件重命名/移动

  1. fs.rename
/**
 * 参数说明:
 * 1. 旧文件路径
 * 2. 新文件路径
 * 3. 回调函数,参数err表示错误信息
 * 注意:如果新文件路径已存在,rename会覆盖该文件
 *      如果要移动文件,只需在新文件路径中指定不同的目录即可
 *      例如,将文件从当前目录移动到move子目录
 *      确保目标目录已存在,否则会报错
 */
fs.rename('./test.txt', './move/renamed-test.txt', (err) => {
  if (err) {
    console.error('重命名文件失败', err)
    return
  }
  console.log('重命名文件成功')
})

如果文件不存在

重命名文件失败 [Error: ENOENT: no such file or directory, rename 'c:\dee\code\code_dee\20251123_nodejs\nodejs-demo\test.txt' -> 'c:\dee\code\code_dee\20251123_nodejs\nodejs-demo\move\renamed-test.txt'] {
  errno: -4058,
  code: 'ENOENT',
  syscall: 'rename',
  path: 'c:\\dee\\code\\code_dee\\20251123_nodejs\\nodejs-demo\\test.txt',
  dest: 'c:\\dee\\code\\code_dee\\20251123_nodejs\\nodejs-demo\\move\\renamed-test.txt'
}
  1. fs.renameSync
/**
 * 参数说明:
 * 1. 文件路径
 * 注意:如果文件不存在,unlinkSync不会报错
 */
try {
  fs.unlinkSync('./move/renamed-test-sync.txt')
  console.log('同步删除文件成功')
} catch (err) {
  console.error('同步删除文件失败', err)
}

文件夹

  1. fs.mkdir
/***
 * 参数说明:
 * 1. 文件夹路径
 * 2. 可选参数,配置对象
 * recursive 是否递归
 */
fs.mkdir('./1/2', {recursive: true}, err => {
  if(err) throw err
  console.log('递归创建成功')
})
  1. fs.mkdirSync
try {
  fs.mkdirSync('./a/b', {recursive: true})
  console.log('同步递归创建成功')
} catch (err) {
  console.error('同步递归创建失败', err)
}
  1. fs.readdir
/**
 * 参数说明:
 * 1. 文件夹路径
 * 2. 回调函数,参数err表示错误信息,参数files表示读取到的文件和文件夹名称数组
 */
fs.readdir('./a', (err, files) => {
  if (err) {
    console.error('读取文件夹失败', err)
    return
  }
  console.log('读取文件夹成功', files)
})
  1. fs.readdirSync
/**
 * 参数说明:
 * 1. 文件夹路径
 * 返回值:读取到的文件和文件夹名称数组
 */
try {
  const files = fs.readdirSync('./1')
  console.log('同步读取文件夹成功', files)
} catch (err) {
  console.error('同步读取文件夹失败', err)
}
  1. fs.rmdir(递归同理)
/**
 * 参数说明:
 * 1. 文件夹路径
 * 2. 回调函数,参数err表示错误信息
 * 注意:如果文件夹不为空,rmdir会报错
 */
fs.rmdir('./1/2', err => {
  if (err) {
    console.error('删除文件夹失败', err)
    return
  }
  console.log('删除文件夹成功')
})
  1. fs.rmdirSync(递归同理)
/**
 * 参数说明:
 * 1. 文件夹路径
 * 注意:如果文件夹不为空,rmdirSync会报错
 */
try {
  fs.rmdirSync('./a/b')
  console.log('同步删除文件夹成功')
} catch (err) {
  console.error('同步删除文件夹失败', err)
}

查看资源状态

  1. stat
/**
 * 参数说明:
 * 1. 文件或文件夹路径
 * 2. 回调函数,参数err表示错误信息,参数stats表示文件或文件夹的状态对象
 * 注意:如果路径不存在,stat会报错
 */
fs.stat('./a', (err, stats) => {
  if (err) throw err
  console.log('获取状态成功', stats)
  console.log('是否是文件:', stats.isFile())
  console.log('是否是文件夹:', stats.isDirectory())
  console.log('创建时间:', stats.birthtime)
  console.log('最后修改时间:', stats.mtime)
  console.log('文件大小:', stats.size, '字节')
})
  1. statSync
/**
 * 参数说明:
 * 1. 文件或文件夹路径
 * 返回值:文件或文件夹的状态对象
 * 注意:如果路径不存在,statSync会报错
 */
try {
  const stats = fs.statSync('./move')
  console.log('同步获取状态成功', stats)
  console.log('是否是文件:', stats.isFile())
  console.log('是否是文件夹:', stats.isDirectory())
  console.log('创建时间:', stats.birthtime)
  console.log('最后修改时间:', stats.mtime)
  console.log('文件大小:', stats.size, '字节')
} catch (err) {
  console.error('同步获取状态失败', err)
}

path模块

import path from 'path'

// 获取当前文件夹的绝对路径
const __dirname = path.resolve()
// 获取路径分隔符
console.log(path.sep)
// 拼接绝对路径
console.log(path.resolve(__dirname, 'test'))
// 解析路径
let pathname = 'D:/program file/nodejs/node.exe'
console.log(path.parse(pathname))
// 获取路径基础名称
console.log(path.basename(pathname))
// 获取路径的目录名
console.log(path.dirname(pathname))
// 获取路径的扩展名
console.log(path.extname(pathname))

文章作者: 👑Dee👑
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 👑Dee👑 !
  目录