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

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('删除目录成功!')})

在这里插入图片描述

http://www.xdnf.cn/news/477685.html

相关文章:

  • 鸿蒙NEXT开发动画案例10
  • 账号风控突破:云手机设备指纹篡改检测与反制技术解析
  • 学习日志38-cpelx求解器使用
  • 前端脚手架开发指南:提高开发效率的核心操作
  • React学习———React Router
  • Jenkins 执行器(Executor)如何调整限制?
  • vue3中预览Excel文件
  • 技术文章:解决汇川MD500系列变频器干扰问题——GRJ9000S EMC滤波器的应用
  • 影楼精修-肤色统一算法解析
  • 7-15 计算圆周率
  • C++ Kafka客户端(cppkafka)安装与问题解决指南
  • Oracle — 总结
  • 智能接处警系统:以秒级联动响应重塑应急处置效能
  • 使用exceljs将excel文件转化为html预览最佳实践(完整源码)
  • 掌握HTML文件上传:从基础到高级技巧
  • 【HTML 全栈进阶】从语义化到现代 Web 开发实战
  • 数字化工厂升级引擎:Modbus TCP转Profinet网关助力打造柔性生产系统
  • SPL做量化---MTM(动量指数)
  • 在 Ubuntu 20.04 中使用 init.d 或者systemd实现开机自动执行脚本
  • 炼丹学习笔记3---ubuntu2004部署运行openpcdet记录
  • OrangePi Zero 3学习笔记(Android篇)11 - IR遥控器
  • 现在环保方面有什么新的技术动态
  • Qt/C++编写音视频实时通话程序/画中画/设备热插拔/支持本地摄像头和桌面
  • MySQL 8.0 OCP 1Z0-908 121-130题
  • 蓝牙协议架构与调试工具详解(含 BLE、HCI 命令、调试命令)
  • Prometheus实战教程:k8s平台-Mysql监控案例
  • 记一次缓存填坑省市区级联获取的操作
  • 自学嵌入式 day19-数据结构 链表
  • 【前端】构建关系图谱的前端组件推荐
  • SqlHelper 实现类,支持多数据库,提供异步操作、自动重试、事务、存储过程、分页、缓存等功能。