记录一下nodejs操作文件的几种形式

359 阅读1分钟

fs模块(File system)

fs 模块可用于与文件系统进行交互(以类似于标准 POSIX 函数的方式)。

所有的文件系统操作都具有同步的、回调的、以及基于 promise 的形式。

引入fs模块

const fs = require('fs');
const proFs = require('fs/promises'); //当你使用promise api来操作文件的时候需要引入 fs/promise

正文开始

1.同步的示例 ==> 删除文件
  • 同步的形式会阻塞 Node.js 事件循环和进一步的 JavaScript 执行,直到操作完成。
  • 异常会被立即地抛出,可以使用 try…catch 处理,也可以冒泡。
 try {
  fs.unlinkSync('./test01.txt'); 
  //unlinkSyn这个api是用来删除文件 , 如操作 , 我删除了与当前js文件同级目录下的'test01.txt'这个文件
  console.log('已成功删除文件');
} catch (err) {
  // 处理错误
  console.log('错误信息' , err)
}
2.回调的示例 ==> 删除文件
  • 异步的形式总是把完成回调作为其最后一个参数 , 传给完成回调的参数取决于具体的方法,但第一个参数总是预留给异常 , 如果操作被成功的完成,则第一参数会为nullundefined
fs.unlink('./test01.txt' , (err) => {
  if(err) throw err;
  console.log('已成功的删除文件');
})
3.promise的示例 ==> 删除文件
  • 基于promise的操作会返回promise(当异步操作完成时被解决)
(async (path) => {
  try {
    await proFs.unlink(path);
    console.log(`已成功删除文件${path}`)
  } catch (error) {
    console.log('出错', error)
  }
})('./test01.txt')
4.回调基于promise的操作的顺序 ==> 修改文件名称
  • 当使用异步的方法时,无法保证顺序。我们希望stat操作一定在rename之后完成 , 所以要在rename成功回调执行stat操作
// rename参数 '旧文件.txt', '新文件.txt', cb
fs.rename('./text01.txt' , './newText01.txt' , (err) => {
  if(err) throw err;
  // 名称修改成功 , 读取属性
  fs.stat('./newText01.txt' , (err , stat) => {
    if(err) throw err;
    console.log(`文件属性:${JSON.stringify(stat)}`)
  })
})
4.1或者基于promise的API
(async (from, to) => {
  try {
    await proFs.rename(from, to);
    const stat = await proFs.stat(to);
    console.log(`文件属性: ${JSON.stringify(stat)}`)
  } catch (err) {
    console.log('出错', err.message)
  }
})('./newText01.txt', 'test01.txt')

以上.

官方文档连接