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

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

相关推荐
Geoking.5 分钟前
SSH 一断 Node 服务就挂?排查与解决方案记录
运维·node.js·ssh
jike88ai34 分钟前
Windows版Claude Code安装与API对接教程(附常见问题解决)
windows·gpt·node.js·claude·claudecode·88api
m0_535817551 小时前
Mac下Claude Code完整配置指南:API中转+环境变量设置一步到位
gpt·macos·node.js·api·claude·claudecode·88api
码农阿豪2 小时前
Node.js 连接金仓数据库踩坑记(上篇):环境搭建与基础操作
数据库·node.js
Hi~晴天大圣14 小时前
npm使用介绍
前端·npm·node.js
m0_5358175518 小时前
macOS下Claude Code从0到1配置教程(附API密钥获取+常见报错修复)
gpt·macos·node.js·api·claude·claudecode·88api
用户357085028811 天前
我做了一个自动生成项目入门文档的 CLI 工具
node.js
云水一下1 天前
模块系统与 npm——万物皆模块
前端·npm·node.js
wgc2k1 天前
Node.js游戏服务器项目移植 4-MongoDB的移植
mongodb·游戏·node.js