【Node.js】fs 文件操作模块

js 复制代码
const fs = require('fs');
// 创建目录
fs.mkdir('./avatar',(err)=> {
  // console.log(err)
  if (err && err.code === 'EEXIST') {
    console.log("目录已经存在")
  }
})

// console.log(__dirname)  // 获取当前脚本文件所在的目录
// 文件夹重命名
fs.rename('./avatar','./avatar1',(err)=> {
    // console.log(err)
    if (err && err.code === 'ENOENT') {
      console.log("目录不存在")
    }
})

// 删除空文件夹
fs.rmdir('./avatar1',(err)=> {
    // console.log(err)
    if (err && err.code === 'ENOENT') {
      console.log("目录不存在")
    }
})

// 创建文件并写(覆盖)内容到文件里
fs.writeFile('./avatar/1.txt', 'hello world', (err) => {
  // console.log(err)
  if (err) {
    console.log(err.message)
  } else {
    console.log('文件创建成功')
  }
})

// 给文件追加内容
fs.appendFile('./avatar/1.txt', 'hello world', (err) => {
  console.log(err)  // null
})

// 读取文件内容
fs.readFile('./avatar/1.txt', 'utf-8', (err, data) => {
  console.log(err, data)
})

// 删除文件
fs.unlink('./avatar/1.txt', (err) => {
  console.log(err)
})

// 读取文件/目录信息
fs.readdir('./', (err, data) => {
  // console.log(data)
  data.forEach((value, index) => {
    fs.stat(`./${value}`, (err, stats) => {
      // console.log(value + ':' + stats.size)
      console.log(value + ' is ' + (stats.isDirectory() ? 'directory' : 'file'))
    })
  })
})
// avatar is directory
// file.js is file

同步异步

js 复制代码
const fs = require('fs');
// 同步读取文件
try {
  const content = fs.readFileSync('./avatar/1.txt', 'utf-8')
  console.log(content)
} catch (err) {
  console.log(err.message)
}

// 异步读取文件:方法一,存在回调地狱的问题
fs.readFile('./avatar/1.txt', 'utf-8', (err, content) => {
  console.log(content)
  console.log(0)
})
console.log(1)
// 1
// 112233
// 0

// 异步读取文件:方法二
const fs = require("fs").promises
fs.readFile('./avatar/1.txt', 'utf-8').then(result => {
  console.log(result)
})

由于Node环境执行的JavaScript代码是服务器端代码,所以,绝大部分需要在服务器运行期反复执行业务逻辑的代码,必须使用异步代码。否则,同步代码在执行时期,服务器将停止响应,因为JavaScript只有一个执行线程。

服务器启动时如果需要读取配置文件,或者结束时需要写入到状态文件时,可以使用同步代码,因为这些代码只在启动和结束时执行一次,不影响服务器正常运行时的异步执行。

相关推荐
还是鼠鼠3 小时前
Node.js自定义中间件
javascript·vscode·中间件·node.js·json·express
橘右溪19 小时前
Node.js核心模块及Api详解
node.js
在下千玦2 天前
#管理Node.js的多个版本
node.js
你的人类朋友2 天前
MQTT协议是用来做什么的?此协议常用的概念有哪些?
javascript·后端·node.js
还是鼠鼠2 天前
Node.js中间件的5个注意事项
javascript·vscode·中间件·node.js·json·express
南通DXZ2 天前
Win7下安装高版本node.js 16.3.0 以及webpack插件的构建
前端·webpack·node.js
你的人类朋友2 天前
浅谈Object.prototype.hasOwnProperty.call(a, b)
javascript·后端·node.js
前端太佬2 天前
暂时性死区(Temporal Dead Zone, TDZ)
前端·javascript·node.js
Mintopia2 天前
Node.js 中 http.createServer API 详解
前端·javascript·node.js
你的人类朋友2 天前
CommonJS模块化规范
javascript·后端·node.js