切换导航
简历
工具
演示
查询
导航菜单
服务端
30
前端
114
数据库
82
进阶开发
8
桌面程序
2
QA
15
软件使用
36
规范协议
5
操作系统
11
AI
0
复用资源
6
硬件
0
标签
HTML
正则表达式
Json
包管理工具
vite
CSS
XPath
JavaScript
Jquery
less
ES6
Vue
React
vue 3
Layui
editor.md
sea.js
Zepto.js
mysql.js
mssql.js
NodeJs
Express
前端template
YAML
杂项
外部链接
.NET Core SDK和运行时安装包
淘宝 NPM 镜像
查询网
Tables Generator线上表格转换工具
引用cdn在线脚本和样式
首页
前端
nodeJs 基础之文件File操作
[TOC] ### 常用的文件操作方法 + `fs.stat(path,callback)` 获取文件信息异步方法 + 第一个参数path:文件路径 + 第二参数callback:回调函数,回到函数也有两个参数,第一个是error,函数执行的错误信息,如果为null则表示函数执行正常,否则执行异常error可看错误的信息。<mark>基本每个node.js异步函数的回调函数第一个参数都是error</mark>。第二个参数是stat,stat是一个对象包含了文件的基本信息。 获取一个不存在文件的文件信息会执行错误,error可以查看错误的原因 ```js const fs = require('fs') fs.stat("./a", (error, stat) => { if (error) { console.log(error); return } }) // 输出: // [Error: ENOENT: no such file or directory, stat 'D:\XX\YY\Study\nodejs\a'] { // errno: -4058, // code: 'ENOENT', // syscall: 'stat', // path: 'D:\\HeMo\\MyProject\\Study\\nodejs\\a' // } ``` 获取一个正确文件的信息,stats对象记录了文件的信息 stats下常用的方法 `stats.isFile():判断是不是文件` `stats.isDirectory():判断是不是目录` stats下常用的属性 `stats.birthtime:文件创建时间` `stats.ctime:(change time)文件状态信息发生变化的时间,比如权限的变更时间` `stats.mtime:(modified time)文件内容的编辑变更时间` `stats.atime:(access time)文件的访问时间` ```js const fs = require('fs') fs.stat("./01.js", (error, stats) => { if (error) { return } if (stats.isFile()) { console.log("文件") } if (stats.isDirectory()) { console.log("目录") } console.log(stats) }) // 输出:文件 // Stats { // dev: 2225956778, // mode: 33206, // nlink: 1, // uid: 0, // gid: 0, // rdev: 0, // blksize: 4096, // ino: 844424930189081, // size: 1294, // blocks: 8, // atimeMs: 1668346946577.3384, // mtimeMs: 1667997715209.5398, // ctimeMs: 1667997715209.5398, // birthtimeMs: 1667137519058.326, // atime: 2022-11-13T13:42:26.577Z, // mtime: 2022-11-09T12:41:55.210Z, // ctime: 2022-11-09T12:41:55.210Z, // birthtime: 2022-10-30T13:45:19.058Z // } ``` + `fs.statSync(path)` 获取文件信息同步方法,与`fs.stat`最终效果是一致的 ```js const fs = require('fs') let stats = fs.statSync("./01.js") console.log(stats) //输出与fs.statS的stats对象一致 ``` + `fs.readFile(path,options,callback)` 读文件异步方法 + 第一个参数path:文件的路径 + 第二个参数options:可选参数如果有第二个参数并且是编码,那么回调函数中的获取到的数据就是字符串,没有的话得到的数据就是一个buffer对象,可选参数除了可以是编码还可以是读写文件的权限 + 第三个参数callback:回调函数,回到函数有两个参数,第一个是error,函数执行的错误信息。第二个参数是data,data就是文件的内容它是一个Buffer字符串对象。 ```js const fs = require('fs') fs.readFile("./temp/test.txt",(error,data)=>{ if(error) return console.log(data.toString()) }) //输出:测试nodejs文件读取(test.txt文件的内容) fs.readFile("./temp/test.txt","utf8",(error,data)=>{ if(error) return console.log(data.toString()) }) //输出:测试nodejs文件读取 ``` + `fs.readFileSync(path,options)` 读文件同步方法,参数和异步一样只是没有回调函数 + 第一个参数path:文件的路径 + 第二个参数options:可选参数如果有第二个参数并且是编码,那么回调函数中的获取到的数据就是字符串,没有的话得到的数据就是一个buffer对象 ```js let ret = fs.readFileSync("./temp/test.txt") console.log(ret.toString()) //输出:测试nodejs文件读取 let ret1 = fs.readFileSync("./temp/test.txt","utf8") console.log(ret1.toString()) //输出:测试nodejs文件读取 ``` + `fs.writeFile(path,content,options,callback)` 写文件异步方法 + 第一个参数path:保存文件的路径 + 第二个参数content:写入的文件内容,这里内容可以是string|buffer + 第三个参数options:可选参数参数可以是encoding(编码)或者flag(读写标识) + 第四个参数callback:回调函数,回到函数同样有error参数 ```js const fs = require('fs') let content = "杜牧 远上寒山石径斜,白云生处有人家。停车坐爱枫林晚,霜叶红于二月花。" fs.writeFile("./temp/02.txt", content, "utf8", error => { if (error) return console.log(error) }) //输出:在temp目录下创建了个02.txt的文件 ``` + `fs.writeFileSync(path,content,options,callback)` 写文件同步方法 + 第一个参数path:保存文件的路径 + 第二个参数content:写入的文件内容 + 第三个参数options:可选参数参数可以是encoding(编码)或者flag(读写标识) ```js const fs = require('fs') let content = "杜牧 远上寒山石径斜,白云生处有人家。停车坐爱枫林晚,霜叶红于二月花。" let req = fs.writeFileSync("./temp/02.txt", content, "utf8") console.log(req); //输出:undefined ``` + `fs.createReadStream(path,options)` 使用流的方式读取文件 + 第一个参数path:文件所在路径 + 第三个参数options:可选参数参数可以是encoding(编码)或者flag(读写标识) + `fs.createWriteStream(path,options)` 使用流的方式写文件 + 第一个参数path:写入文件在路径 + 第三个参数options:可选参数参数可以是encoding(编码)或者flag(读写标识) ```js let path = require("path") let fs = require("fs") let spath = path.join(__dirname, "temp/02.txt") let dpath = "C:\\Users\\86183\\Desktop\\02.txt" let readStream = fs.createReadStream(spath) let writeStream = fs.createWriteStream(dpath) let num = 0 //基于事件的处理方式 readStream.on("data", (chunk) => { num++ writeStream.write(chunk) }) readStream.on("end", () => { console.log(num) }) //输出:1 ``` + `pipe()` 链接输入流(磁盘读取到内存)和输出流(内存写入到磁盘) ```js let path = require("path") let fs = require("fs") let spath = path.join(__dirname, "temp/02.txt") let dpath = "C:\\Users\\86183\\Desktop\\02.txt" let readStream = fs.createReadStream(spath) let writeStream = fs.createWriteStream(dpath) readStream.pipe(writeStream) ``` ### 附加说明 #### node.js文件操作涉及说明 + 异步I/O(input/output)思想,js的运行是单线程的,所以在node.js和浏览器也是单线程,如果在处理比较耗时的任务时,单线程方式就不合适了,这时node.js就引入了事件队列来执行这些耗时的任务,以确保主线程不堵塞,能进入事件队列的情况包括<mark>文件读写操作</mark>和<mark>网络的请求相应处理</mark>,也就是异步I/O的操作会进入到事件队列中。 > 浏览器中也存在异步操作 >>定时任务 >>事件处理 >>Ajax回调处理 > node.js中的事件模型与浏览器中的事件模型类似,<mark>单线程+事件队列</mark> + Node.js中的异步执行的任务 + 文件操作的文件I/O + 网络操作的网络I/O + Node.js的编程特征是基于回调函数的编码风格,基本每种函数都异步和同步两个方法。 #### node.js常用的几种文件flag标识 | 标识 | 描述 | | ------------ | ------------ | | `r+` | 打开文件用于读写。 | | `w+` | 打开文件用于读写,将流定位到文件的开头。如果文件不存在则创建文件。 | | `a` | 打开文件用于写入,将流定位到文件的末尾。如果文件不存在则创建文件。 | | `a+` | 打开文件用于读写,将流定位到文件的末尾。如果文件不存在则创建文件。 |
扫一扫手机看
点击排行
windows 文件资源管理器使用
Layui 弹窗open使用说明
SQL Server 中字符串函数使用
C# 使用QQ邮箱代理做邮件接收功能
SQL Server关于apply的两种形式cross apply 和 outer apply
ASP.NET MVC 模型的自定义验证
nvm安装及常用命令
SQL Server 中数据类型转换
SQL Server 中WITH AS短语的使用
IE浏览器下AJAX缓存问题导致数据不更新的解决办法
订阅号