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

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

相关推荐
西门吹-禅17 小时前
prisma
node.js
怪兽毕设18 小时前
基于SpringBoot的选课调查系统
java·vue.js·spring boot·后端·node.js·选课调查系统
心.c21 小时前
Vue3+Node.js实现文件上传分片上传和断点续传【详细教程】
前端·javascript·vue.js·算法·node.js·哈希算法
roamingcode21 小时前
我是如何 Vibe Coding,将 AI CLI 工具从 Node.js 迁移到 Rust 并成功发布的
人工智能·rust·node.js·github·claude·github copilot
Stream_Silver3 天前
【Node.js 安装报错解决方案:解决“A later version of Node.js is already installed”问题】
node.js
Anthony_2313 天前
基于 Vue3 + Node.js 的实时可视化监控系统实现
node.js
说给风听.3 天前
解决 Node.js 版本冲突:Windows 系统 nvm 安装与使用全指南
windows·node.js
森叶3 天前
Node.js 跨进程通信(IPC)深度进阶:从“杀人”的 kill 到真正的信号
node.js·编辑器·vim
虹科网络安全4 天前
艾体宝新闻 | NPM 生态系统陷入困境:自我传播恶意软件在大规模供应链攻击中感染了 187 个软件包
前端·npm·node.js
摇滚侠4 天前
PNPM 包管理工具和 NPM 包管理工具
vscode·npm·node.js·pnpm