Node.js文件系统模块——读写文件操作
文章目录
- 前言
- 一、导入fs模块
- 1.readFile() && readFileSync()
- 2.writeFile() && writeFileSync()
- 3.appendFile() && appendFileSync()
- 二、处理文件路径
- 1.__dirname动态拼接路径
前言
Node.js文件系统模块,也称作fs模块,作为Node.js内置API,提供了许多非常实用的函数来访问文件系统并与文件系统进行交互。写这篇文章用以总结常用核心API——读写文件操作以及文件路径的处理。其余API参照官方核心文档 fs 文件系统 | Node.js API 文档... 或菜鸟教程 Node.js 文件系统 | 菜鸟教程
一、导入fs模块
作为 Node.js 核心的组成部分,可以通过简单地引用来使用它:
const fs = require('fs');
1.readFile() && readFileSync()
使用fs.readFile()方法,可以读取指定文件中的内容,语法格式如下:
fs.readFile(path[, options], callback)
参数1(必选):字符串,表示文件的路径
参数2(可选):表示读取文件的编码格式
参数1(必选):回调函数,异步处理读取文件后的结果
示例如下:
// 导入fs模块,来操作文件
const fs = require('fs');
fs.readFile('HelloWorld.txt', 'utf8', function (err, dataStr) {if (err) {return console.log('读取文件失败!错误信息为:' + err.message);}console.log("读取文件成功!结果为:" + dataStr);
})
处理读取文件结果的回调函数同时也接收两个参数:第一个参数包含错误信息(读取文件成功时其值为null),第二个参数为读取的数据(读取失败时其为undefined)
因文件操作为异步操作,另外也可以使用同步版本的fs.readFileSync():
const fs = require('fs');
let data = fs.readFile('HelloWorld.txt', 'utf8');
console.log("同步读取: " + data.toString());
因为fs.readFileSync()为同步调用,所以没有回调函数作为参数传入
注:fs.readFile()与fs.readFileSync()都会在返回数据之前将文件内容读取到内存中,一般不使用readFileSync(),防止读取大文件时消耗内存和影响程序执行的速度
2.writeFile() && readFileSync()
使用fs.writeFile()方法,可以写入内容到指定文件中,语法格式如下:
fs.writeFile(path, data[, options], callback)
参数1(必选):字符串,表示文件的路径
参数2(必选):字符串,表示要写入文件的内容
参数3(可选):表示读取文件的编码格式,默认为utf8
参数4(必选):文件写入完成后的回调函数
示例如下:
let fs = require('fs');
let data = "你爱我,我爱你,蜜雪冰城甜蜜蜜"
fs.writeFile('HelloWorld.txt', data, 'utf8', function (err) {if (err) {console.log('写入文件失败!')}return console.log('写入文件成功!')
})
不同于读取文件,文件写入完成后的回调函数只接收一个参数:包含错误信息的参数(文件写入成功时值为null)
注:该方法在文件存在的情况下会替换文件的内容;在文件不存在时会根据路径自动创建文件并写入内容;除此以外返回错误信息;
另外也有对应的同步版本的fs.writeFileSync():同步执行,无需回调函数,写入大文件时消耗内存和影响程序执行的速度
3.appendFile()追加写入文件
将内容追加到文件末尾的方法是fs.appendFile(),语法格式同fs.wirteFile():
fs.appendFile(path, data[, options], callback)
let fs = require('fs');
fs.appendFile("HelloWorld.txt", '一点东西', 'utf8', function (err) {if (err) {console.log('追加失败~');return;}console.log('追加成功!');
})
同时也有其对应的同步版本的appendFileSync()
二、处理文件路径
1.__dirname动态拼接路径
不论是读取或是写入文件的操作,第一个接收的参数永远是文件所在的路径,该路径会在代码运行时同执行node命令所处的目录进行动态拼接出操作文件的完整路径。
若我们经常以 ./ 或者 ../ 符号开头的相对路径作为文件的操作路径时,很容易出现路径动态拼接错误。
解决方案一:
于是我们可能会采用将操作路径直接采用文件的绝对路径作为第一个参数传入
let fs = require('fs');
let data = "一点东西"
fs.writeFile('C:\\Users\\林木木\\Desktop\\node\\fs文件系统模块\\HelloWorld.txt', data, 'utf8', function (err) { if (err) {console.log('写入文件失败!')}return console.log('写入文件成功!')
})
but:如此写会导致代码移植性很差,不利于维护
解决方案二:
node.js提供了__dirname用以表示当前文件所处的目录,因此我们可以改为:
let fs = require('fs');
let data = "一点东西"
fs.writeFile(__dirname + 'HelloWorld.txt', data, 'utf8', function (err) {if (err) {console.log('写入文件失败!')}return console.log('写入文件成功!')
})
由此,由__dirname与文件操作路径动态地拼接为文件的完整路径,更有利于代码的维护。
Node.js文件系统模块——读写文件操作相关推荐
- node.js文件系统中同步文件、异步文件、简单文件、流式文件如何写入
文件系统(File System) -文件系统简单来说就是通过Node来操作系统中的文件 -使用文件系统,需要先引入fs模块,fs是核心模块,直接引入不需要下载 一.同步文件的写入 -手动操作的步骤 ...
- 模块加载及第三方包:Node.js模块化开发、系统模块、第三方模块、package.json文件、Node.js中模块的加载机制、开发环境与生产环境、cookie与session
1.Node.js模块化开发 1.1 JavaScript开发弊端 JavaScript 在使用时存在两大问题,文件依赖和命名冲突. 1.2 软件中的模块化开发 一个功能就是一个模块,多个模块可以组成 ...
- 33.Node.js 文件系统fs
转自:http://www.runoob.com/nodejs/nodejs-module-system.html Node.js 提供一组类似 UNIX(POSIX)标准的文件操作API. Node ...
- JavaScript之后端Web服务器开发Node.JS基本模块学习篇
JavaScript之后端Web服务器开发Node.JS基本模块学习篇 基本模块 fs文件系统模块 stream支持流模块 http crypto加密模块 基本模块 因为Node.js是运行在服务区端 ...
- node.js中模块_在Node.js中需要模块:您需要知道的一切
node.js中模块 by Samer Buna 通过Samer Buna 在Node.js中需要模块:您需要知道的一切 (Requiring modules in Node.js: Everythi ...
- node.js fs模块_Node.js中的fs模块简介
node.js fs模块 fs, short for File System, is one of the most basic and useful modules in Node. In this ...
- Node.js Web 模块
Node.js Web 模块 什么是 Web 服务器? Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,Web服务器的基本功能就是提供Web信息浏览服务.它只需支持HTTP协议. ...
- Node.js Domain 模块
Node.js 工具模块 Node.js Domain(域) 简化异步代码的异常处理,可以捕捉处理try catch无法捕捉的异常.引入 Domain 模块 语法格式如下: var domain = ...
- Node.js DNS 模块
Node.js 工具模块 Node.js DNS 模块用于解析域名.引入 DNS 模块语法格式如下: var dns = require("dns") 方法 序号 方法 & ...
最新文章
- python基础与大数据_Python大数据基础与实战第10章数据可视化.pptx
- 【OO学习】OO第四单元作业总结及OO课程总结
- UWP AppBarButton Icon 图标样式集合
- JavaScript——定时器(setTimeout/setInterval)
- Java JDBC篇2——JDBC增删查改
- OSChina 周一乱弹 —— 程序员的浪漫你不懂
- 中文python笔记_Python笔记记录
- Dapper.net 入门demo 轻量级ORM框架
- PLC编程器的功能有什么功能?
- 猎豹网校java版算法_猎豹网校JAVA语言数据结构与算法视频教程 Java语言
- EOF经验正交展开(一)——主成分分析
- 最新PHP全开源京东淘宝唯品会自动抢单系统源码
- 计算机领域新技术的工作原理,七年级信息技术上册 第4课《计算机系统及其工作原理》教学案 新人教版...
- 2022年的零日漏洞影响了哪些平台?
- 玩转树莓派 —智能家居(语音控制电器开关 及语音模块的二次开发)
- postgresql导出表结构以及数据到mysql
- 微信小程序—自定义相机
- 应用在低功耗SMPS中的GaN/氮化镓
- AntV G6修改节点label样式
- VRPB(Vehicle Routing Problem Backhauls)说明+pythoncode