【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只有一个执行线程。

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

相关推荐
wno7043 小时前
node.js中使用jquery
前端·node.js·jquery
damoluomu21 小时前
Node 的 Headless 出厂没有前台,Java 的 Headless 是从门户里长出来的
java·开发语言·node.js
Dumbness1 天前
一个手机号验证码登录接口的五个坑:无限发码、无限试码,传个数字就让 Express 进程退出
node.js·express
怒放的生命19911 天前
本地用 pnpm 省磁盘,团队继续用 npm:极简实践
前端·npm·node.js
Hone2 天前
我把「自动发文章到掘金」做成了一个 Agent 技能:juejin-skills
node.js·ai编程·前端工程化
Dumbness2 天前
二十行手写的 SKILL.md 头部解析,遇到 YAML 的折叠写法、单引号和嵌套键就读错:和 js-yaml 逐条对照
node.js·ai编程
只睡四小时3 天前
MCP 弃用 SSE?Node 分帧漏 81.7% 事件
node.js·webassembly·实时通信·mcp·streamable http
hey you~3 天前
个体户门店办理400电话,如何对接订单系统实现来电弹窗
node.js·webhook·400电话·门店数字化·来电弹窗·订单系统对接
YIAN4 天前
RAG 学到最后,我真正学会的不是“检索”,而是让系统知道自己缺什么
langchain·node.js·llm