当前位置: 首页 > article >正文

node.js文件系统(fs) - 创建文件、打开文件、写入数据、追加数据、读取数据、创建目录、删除目录

注意:以下所有示例均是异步语法!
注意:以下所有示例均是异步语法!

创建文件

node.js 允许我们在计算机本地创建文件,例如创建一个 word 文件:

// 引入核心模块(fs)
var fs = require('fs')// API
fs.writeFile('./hello.doc', 'hello', (error) => {// 创建失败if(error){console.log(`创建失败:${error}`)}// 创建成功console.log(`创建成功!`)})
// 注意:同名/同类型文件多次创建并不会新增,而是覆盖机制

首先引入 node.js 为我们写好的核心模块 fs ,接着使用 writeFile API 进行参数配置,第一个参数(‘./hello.doc’) 为文件位置/类型/命名,第二个参数(‘hello’) 为文件默认内容。

需要注意的是,如果创建文件成功,error 的值是 null,你可以使用 console.log 来查看 error 在何是发生改变。
在这里插入图片描述

打开文件

有必要说一下语法及参数,剩下的按照参数配置进行业务编写即可。

语法

fs.open(path, flags[, mode], callback)

参数:

  1. path:文件的路径
  2. flags:文件打开的行为,具体值详表格
  3. mode:设置文件模式(权限),文件创建默认权限为 0666(可读,可写)
  4. callback:回调函数,带有两个参数如:callback(err, fd)
flags描述
r以读取模式打开文件。如果文件不存在抛出异常。
r+以读写模式打开文件。如果文件不存在抛出异常。
rs以同步的方式读取文件。
rs+以同步的方式读取和写入文件。
w以写入模式打开文件,如果文件不存在则创建。
wx类似 ‘w’,但是如果文件路径存在,则文件写入失败。
w+以读写模式打开文件,如果文件不存在则创建。
wx+类似 ‘w+’, 但是如果文件路径存在,则文件读写失败。
a以追加模式打开文件,如果文件不存在则创建。
ax类似 ‘a’, 但是如果文件路径存在,则文件追加失败。
a+以读取追加模式打开文件,如果文件不存在则创建。
ax+类似 ‘a+’, 但是如果文件路径存在,则文件读取追加失败。

打开刚刚创建的 hello.doc 文件:

// 引入核心模块(fs)
var fs = require('fs')// API
fs.open('./input.txt', 'r', (err,fd) => {// 打开失败if(err){console.log(`文件打开失败:${err}`)}// 打开成功console.log(`文件打开成功!${fd}`)})

写入内容

我们可以通过 缓冲区(Buffer) / writeFile方法 来为文件写入二进制内容。

语法

fs.writeFile(file, data[, options], callback)

writeFile 直接打开文件默认是 w 模式,所以如果文件存在,该方法写入的内容会覆盖旧的文件内容。

参数

  1. file:文件名或文件描述符。
  2. data:要写入文件的数据,可以是 String(字符串) 或 Buffer(缓冲) 对象。
  3. options:该参数是一个对象,包含 {encoding, mode, flag}。默认编码为 utf8, 模式为 0666 , flag 为 ‘w’
  4. callback:回调函数,回调函数只包含错误信息参数(err),在写入失败时返回。
// 引入读写核心模块
var fs = require('fs')// 向文件中写入内容(利用缓冲区解决二进制数据问题)
var data = '\n I am input content \n'
var data = new Buffer(data)//放入缓冲区// API
fs.writeFile('input.txt', data, {flag: 'a'}, (err) => {// 写入失败if(err){console.log(`文件写入失败(${err})`)}// 写入成功console.log(`写入成功!`)})

在这里插入图片描述

追加内容

将数据追加到文件,需要注意的是,如果文件尚不存在则会创建该文件。

语法

fs.appendFile(filename,data,[options],callback);
// 引入读写核心模块
var fs = require('fs')// node.js 规定 data 可以是 string / buffer
var data = '\n 我是追加的内容! \n'
var data = new Buffer(data)//这里使用缓冲区(buffer)// API
fs.appendFile('input.txt', data, (err) => {// 追加失败if(err) throw err// 追加成功console.log('追加内容成功!')})

在这里插入图片描述

读取内容

读取文件中的内容。

语法

fs.read(fd, buffer, offset, length, position, callback)

参数

  1. fd:通过 fs.open() 方法返回的文件描述符。
  2. buffer:数据写入的缓冲区。
  3. offset:缓冲区写入的写入偏移量。
  4. length:要从文件中读取的字节数。
  5. position:文件读取的起始位置,如果 position 的值为 null,则会从当前文件指针的位置读取。
  6. callback:回调函数,有三个参数err, bytesRead, buffer,err 为错误信息, bytesRead 表示读取的字节数,buffer 为缓冲区对象。

input.txt 文件内容

我是内容
// 引入读写核心模块
var fs = require('fs')// 读取 input.txt 文件(异步非阻塞式)
fs.readFile('input.txt', (err,data) => {// 读取失败if(err) throw err// 读取成功console.log('- - - - - - - - - - - - - - - - - - - - -')console.log(`input.txt:${data}`)console.log('- - - - - - - - - - - - - - - - - - - - -')})

在这里插入图片描述

创建目录

创建一个目录,需要注意的是,在 Windows 上,在根目录上使用 fs.mkdir() (即使使用递归参数)也会导致错误。

语法

fs.mkdir(path[, options], callback)

参数

  1. path:文件路径。
  2. options:recursive - 是否以递归的方式创建目录,默认为 false。mode - 设置目录权限,默认为 0777。
  3. callbac:回调函数,没有参数。
// 引入读写核心模块
var fs = require('fs')// 注意:目录的根必须存在
console.log('即将开始创建...')
fs.mkdir("/data/new", (err) => {// 创建失败if(err) throw err// 创建成功console.log('文件创建成功!')
})

在这里插入图片描述
注意:如果创建的目录已经存在,则会提示如下Error:

Error: EEXIST: file already exists, mkdir 'C:\data\new'

删除目录

删除一个已经存在的目录,需要注意的是,在递归模式中,如果 path 不存在则不报告错误,并且在失败时重试操作。

语法

fs.rmdir(path, callback)

参数

  1. path:文件路径。
  2. callback:回调函数。
// 引入读写核心模块
var fs = require('fs')// 删除前一个创建的目录(/data/new)
console.log('准备执行删除目录操作')
fs.rmdir("/data/new", (err) => {// 删除失败if(err) throw err// 删除成功console.log('删除目录成功!')})

在这里插入图片描述

相关文章:

node.js文件系统(fs) - 创建文件、打开文件、写入数据、追加数据、读取数据、创建目录、删除目录

注意:以下所有示例均是异步语法! 注意:以下所有示例均是异步语法! 创建文件 node.js 允许我们在计算机本地创建文件,例如创建一个 word 文件: // 引入核心模块(fs) var fs require(fs)// API fs.writeF…...

SQL:MySQL函数:空值处理函数(NULL Handling Functions)

目录 什么是空值(NULL)? 常用空值处理函数总览 1️⃣ IFNULL() – 空值替换函数(If Null) 2️⃣ COALESCE() – 多参数空值判断(返回第一个非 NULL 值) 3️⃣ NULLIF() – 相等则返回 NULL…...

利用ffmpeg截图和生成gif

从视频中截取指定数量的图片 ffmpeg -i input.mp4 -ss 00:00:10 -vframes 1 output.jpgffmpeg -i input.mp4 -ss 00:00:10 -vframes 180 output.jpg -vframes 180代表截取180帧, 实测后发现如果视频是60fps,那么会从第10秒截取到第13秒-i input.mp4:指定输入视频文…...

初始化一个Springboot项目

初始化一个Springboot项目 文章目录 初始化一个Springboot项目1、新建项目2、配置yml3、自定义异常4、通用相应类5、全局跨域配置6、总结 1、新建项目 首先,我们需要创建一个新的 Spring Boot 项目。这里我们使用 IntelliJ IDEA 作为开发工具,它提供了方…...

YOLOv8在单目向下多车辆目标检测中的应用

大家读完觉得我有帮助记得关注!!! 摘要 自动驾驶技术正逐步改变传统的汽车驾驶方式,标志着现代交通运输的一个重要里程碑。目标检测是自主系统的基石,在提高驾驶安全性、实现自主功能、提高交通效率和促进有效的应急…...

23种设计模式解释+记忆

一、创建型模式(5种)—— “怎么造对象?” 单例模式(Singleton) 场景:公司的CEO只能有一个。 核心:确保一个类只有一个实例,全局访问。 关键词:唯一、全局访问。 工厂方…...

Baklib构建AI就绪型知识中台实践

Baklib驱动企业知识资产重构 在数字化转型浪潮中,企业知识中台的构建已成为激活数据价值的关键路径。Baklib通过结构化存储与智能分类引擎,将分散于邮件、文档、IM工具中的碎片化信息转化为可检索、可复用的数字资产。其核心能力体现在三个维度&#xf…...

JS逆向-某易云音乐下载器

文章目录 介绍下载链接Robots文件搜索功能JS逆向**函数a:生成随机字符串****函数b:AES-CBC加密****函数c:RSA公钥加密** 歌曲下载总结 介绍 在某易云音乐中,很多歌曲听是免费的,但下载需要VIP,此程序旨在“…...

FreeRTOS全攻略:从入门到精通

目录 一、FreeRTOS 基础概念1.1 FreeRTOS 是什么1.2 为什么选择 FreeRTOS 二、与裸机开发的区别2.1 任务管理2.2 中断处理2.3 资源管理 三、FreeRTOS 入门篇3.1 内存管理3.2 任务创建3.3 任务状态3.4 任务优先级3.5 空闲任务和钩子函数3.6 同步与互斥​3.7 队列​3.8 信号量​3…...

服务器的基础知识

什么是服务器 配置牛、运行稳、价格感人的高级计算机,家用电脑不能比拟的。 服务器的组成:电源、raid卡、网卡、内存、cpu、主板、风扇、硬盘。 服务器的分类 按计算能力分类 超级计算机 小型机AIX x86服务器(服务器cpu架构) …...

AGI大模型(25):LangChain提示词模版

我们也可以创建prompt template, 并引入一些变量到prompt template中,这样在应用的时候更加灵活。 1 代码实现 # 我们也可以创建prompt template, 并引入一些变量到prompt template中,这样在应用的时候更加灵活 from langchain_core.prompts import ChatPromptTemplate from…...

Python连接redis

第一步安装redis Releases microsoftarchive/redis 安装时勾上所有能勾上的选项下一步即可 在CMD中pip install redis 安装redis pip install redis -i https://pypi.tuna.tsinghua.edu.cn/simple 配置redis 在redis安装目录下找到 修改 line 57 bind 0.0.0.0 line…...

使用exceljs将excel文件转化为html预览最佳实践(完整源码)

前言 在企业应用中,我们时常会遇到需要上传并展示 Excel 文件的需求,以实现文件内容的在线预览。经过一番探索与尝试,笔者最终借助 exceljs 这一库成功实现了该功能。本文将以 Vue 3 为例,演示如何实现该功能,代码示例…...

前端面经12 函数柯里化

<script>function sum(num){return function(num2){return numnum2}}console.log(sum(1)(2))</script>面试考察 只要参数够了 达到某个数量就输出 <script>let nums[]function sum(...args){nums.push(...args)if(nums.length>5){const out (nums.slice…...

企业级 Hosts 自动化管理实战:基于 HTTP 检测的高可用域名解析方案

摘要 本文针对企业级域名解析稳定性需求&#xff0c;提供一套从IP 检测到Hosts 更新的完整自动化解决方案。通过 HTTP 状态码检测、权威 DNS 解析、原子化文件操作等核心技术&#xff0c;结合多行业真实案例&#xff0c;详细阐述方案设计、脚本实现与生产部署&#xff0c;帮助…...

告别蜘蛛池!PHP 打造你的网站专属蜘蛛导航仪

在网站优化的赛道上&#xff0c;吸引搜索引擎蜘蛛来访一直是站长和开发者关注的重点。以往借助蜘蛛池、软件等工具引蜘蛛&#xff0c;不仅存在成本高、易违规的风险&#xff0c;效果也参差不齐。现在&#xff0c;有一种更高效、更安全的方式 —— 利用 PHP 代码&#xff0c;无需…...

ubuntu kubeasz 部署高可用k8s 集群

ubuntu kubeasz 部署高可用k8s 集群 测试环境主机列表软件清单kubeasz 部署高可用 kubernetes配置源配置host文件安装 ansible 并进行 ssh 免密登录:下载 kubeasz 项⽬及组件部署集群部署各组件开始安装修改 config 配置文件增加 master 节点增加 kube_node 节点登录dashboard…...

芯驰科技与安波福联合举办技术研讨会,深化智能汽车领域合作交流

5月15日&#xff0c;芯驰科技与全球移动出行技术解决方案供应商安波福&#xff08;Aptiv&#xff09;在上海联合举办以“芯智融合&#xff0c;共赢未来”为主题的技术研讨会。会上&#xff0c;双方聚焦智能座舱与智能车控的发展趋势&#xff0c;展开深入交流与探讨&#xff0c;…...

PaddleClas 车辆属性模型vehicle_attribute_model转onnx并部署

下载paddlepaddle3.0.0 下载paddleclas 2.6.0 实验&#xff1a; 运行前输入&#xff1a; export FLAGS_enable_pir_api0 import paddleclas model paddleclas.PaddleClas(model_name"vehicle_attribute") result model.predict(input_data"/home/Pad…...

【论文#目标检测】End-to-End Object Detection with Transformers

目录 摘要1.引言2.相关工作2.1 集合预测2.2 Transformer和并行解码2.3 目标检测 3.DETR模型3.1 目标检测集合预测损失3.2 DETR架构 4.实验4.1 与Faster R-CNN的比较4.2 消融研究4.3 分析4.4 DETR用于全景分割 5.结论6.致谢 Author: Nicolas Carion, Francisco Massa, Gabriel S…...

C++:迭代器

迭代器的本质&#xff1a;对象。 迭代器与指针类似&#xff0c;通过迭代器可以指向容器中的某个元素&#xff0c;还可以对元素进行操作。 迭代器统一规范了遍历方式。不同的数据结构可以用统一的方式去遍历。 接下来是一个自定义迭代器的代码示例。 #include<iostream&g…...

MongoDB数据库深度解析:架构、特性与应用场景

在现代应用程序开发中&#xff0c;数据存储技术的选择至关重要。在众多的数据库管理系统中&#xff0c;MongoDB以其灵活性和强大的功能迅速崛起&#xff0c;成为NoSQL数据库中的佼佼者。本文将深入解析MongoDB的架构、核心特性、性能优化及其在实际应用中的最佳实践&#xff0c…...

【强化学习】深度强化学习 - Deep Q-Network(DQN)算法

文章目录 摘要一、DQN核心原理1. Q-learning回顾2. 用深度网络逼近Q函数3. 经验回放&#xff08;Experience Replay&#xff09;4. 目标网络&#xff08;Target Network&#xff09;5. 损失函数6. ε-贪心策略&#xff08;ε-greedy&#xff09; 二、算法流程与伪代码三、典型实…...

git 修改一个老commit,再把修改应用到所有后续的 commit

找到你想修改的 commit 的哈希值&#xff08;前7位即可&#xff09;。 git rebase -i <commit-hash>^找到你想修改的 commit 行 将行首的 pick 改为 edit 保存并退出编辑器 进行想要的修改 git add <修改的文件> git commit --amendgit rebase --continue如果…...

docker compose 启动指定的 service

使用 Docker Compose 启动指定服务 要在 Docker Compose 中启动特定的服务而不是所有服务&#xff0c;可以使用以下命令&#xff1a; docker compose up [服务名] 基本用法 启动单个服务&#xff1a; docker compose up service_name 启动多个指定服务&#xff1a; docker …...

Elasticsearch 深入分析三种分页查询【Elasticsearch 深度分页】

前言&#xff1a; 在前面的 Elasticsearch 系列文章中&#xff0c;分享了 Elasticsearch 的各种查询&#xff0c;分页查询也分享过&#xff0c;本篇将再次对 Elasticsearch 分页查询进行专题分析&#xff0c;“深度分页” 这个名词对于我们来说是一个非常常见的业务场景&#…...

DAY29 超大力王爱学Python

知识点回顾 类的装饰器装饰器思想的进一步理解&#xff1a;外部修改、动态类方法的定义&#xff1a;内部定义和外部定义 作业&#xff1a;复习类和函数的知识点&#xff0c;写下自己过去29天的学习心得&#xff0c;如对函数和类的理解&#xff0c;对python这门工具的理解等&…...

Ubuntu 远程桌面配置指南

概述: 本文主要介绍在Ubuntu 22.04中通过VNC实现远程连接的方法。首先需安装图形化界面和VNC工具x11vnc,设置开机启动服务;然后在Windows客户端用VNC Viewer通过局域网IP和端口5900连接。 总结: 一、VNC配置与安装 安装图形化界面 在Ubuntu 22.04中需先安装: sudo apt …...

【Python装饰器深度解析】从语法糖到元编程实战

目录 🌟 前言🏗️ 技术背景与价值🩹 当前技术痛点🛠️ 解决方案概述👥 目标读者说明🧠 一、技术原理剖析📊 核心概念图解💡 核心作用讲解🔧 关键技术模块说明⚖️ 技术选型对比🛠️ 二、实战演示⚙️ 环境配置要求💻 核心代码实现案例1:基础计时装饰器案…...

推扫式高光谱相机VIX-N230重磅发布——开启精准成像新时代

随着各行业对高光谱成像技术需求的持续增长&#xff0c;市场对于高分辨率、高灵敏度以及快速成像的高光谱相机的需求愈发迫切。中达瑞和凭借多年的行业经验和技术积累&#xff0c;敏锐捕捉到这一市场趋势&#xff0c;正式推出全新一代推扫式可见光近红外高光谱相机——VIX-N230…...