Nodejs的fs模块怎么使用
发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,本文小编为大家详细介绍"Nodejs的fs模块怎么使用",内容详细,步骤清晰,细节处理妥当,希望这篇"Nodejs的fs模块怎么使用"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知
千家信息网最后更新 2025年01月24日Nodejs的fs模块怎么使用
本文小编为大家详细介绍"Nodejs的fs模块怎么使用",内容详细,步骤清晰,细节处理妥当,希望这篇"Nodejs的fs模块怎么使用"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
Nodejs 中的 fs 模块的使用
1、fs.stat 检测是文件还是目录
const fs = require('fs')fs.stat('./html', (err, data) => { if (err) { console.log(err) return } console.log(`是文件:${data.isFile()}`) console.log(`是目录:${data.isDirectory()}`)})fs.stat('./package.json', (err, data) => { if (err) { console.log(err) return } console.log(`是文件:${data.isFile()}`) console.log(`是目录:${data.isDirectory()}`)})
2、fs.mkdir 创建目录
最初的目录
const fs = require('fs') /* path 将创建的目录路径 mode 目录权限(读写权限),默认777 callback 回调,传递异常参数err */fs.mkdir('./css', (err) => { if (err) { console.log(err) return } console.log('创建成功')})
执行代码后
再次执行代码,提示已经创建了
3、fs.writeFile 创建写入文件
const fs = require('fs')/* filename (String) 文件名称 data (String | Buffer) 将要写入的内容,可以使字符串 或 buffer数据。 options (Object) option数组对象,包含: · encoding (string) 可选值,默认 'utf8′,当data使buffer时,该值应该为 ignored。 · mode (Number) 文件读写权限,默认值 438 · flag (String) 默认值 'w' callback {Function} 回调,传递一个异常参数err。 */fs.writeFile('./html/index.html', '你好nodejs', (err) => { if (err) { console.log(err) return } console.log('创建写入文件成功')})
如果重复写入,会替换内容
4、fs.appendFile 追加文件
const fs = require('fs')fs.appendFile('./css/base.css', 'body{color:red}', (err) => { if (err) { console.log(err); return; } console.log('appendFile 成功');})
执行代码后
如果重复执行代码,会追加其后,不会替代
5、fs.readFile 读取文件
const fs = require('fs')fs.readFile('./html/index.html', (err, data) => { if (err) { console.log(err); return; } console.log(data) console.log(data.toString()) //把Buffer转换为string类型})
6、fs.readdir 读取目录
const fs = require('fs')fs.readdir('./html', (err, data) => { if (err) { console.log(err); return; } console.log(data)})
7、fs.rename 重命名
功能:1、表示重命名 2、移动文件
const fs = require('fs')fs.rename('./css/base.css', './css/index.css', (err) => { if (err) { console.log(err); return; } console.log('重命名成功')})
执行代码后
再看一下移动文件怎么用
const fs = require('fs')fs.rename('./css/index.css', './html/index.css', (err) => { if (err) { console.log(err); return; } console.log('移动文件成功')})
执行代码后
8、fs.rmdir 删除目录
const fs = require('fs')fs.rmdir('./html/aaa', (err) => { if (err) { console.log(err); return; } console.log('删除目录成功')})
执行代码之后
再看一个例子
const fs = require('fs')fs.rmdir('./html/aaa', (err) => { if (err) { console.log(err); return; } console.log('删除目录成功')})
执行代码之后,发现并没有删除掉aaa这个目录,而是报错了,这是因为
注意,如果这个目录下有文件,需要先将文件删除之后,再进行删除目录的操作
9、fs.unlink 删除文件
const fs = require('fs')fs.unlink('./html/aaa/aaa.html', (err) => { if (err) { console.log(err); return; } console.log('删除文件成功')})
执行代码之后
10、第三方的mkdirp
const mkdirp = require('mkdirp')mkdirp('./upload/aaa/bbb').then(made => console.log(`made directories, starting with ${made}`))
执行代码之后
11、综合练习
1.判断服务器上面有没有upload目录。如果没有创建这个目录,如果有的话不做操作。
//1.判断服务器上面有没有upload目录。如果没有创建这个目录,如果有的话不做操作。const fs = require('fs')const path = './upload'fs.stat(path, (err, data) => { if (err) { //没有这个目录,执行创建目录 mkDir(path) } if (data.isDirectory()) { console.log('创建失败,已经有这个目录了') } else { //没有这个目录,如果有同样命名的文件,需要删除这个文件之后,再去创建目录 fs.unlink(path, (err) => { if (!err) { mkDir(path) } else { console.log('请检测传入的数据是否正确') } }) }})function mkDir (path) { fs.mkdir(path, (err) => { if (err) { console.log(err) return } })}
执行代码之后
2、练习:wwwroot文件夹下面有images css js 以及index.html , 找出 wwwroot目录下面的所有的目录,然后放在一个数组中
//wwwroot文件夹下面有images css js 以及index.html , 找出 wwwroot目录下面的所有的目录,然后放在一个数组中const fs = require('fs');//错误的写法 注意:fs里面的方法是异步/* var path = './wwwroot';var dirArr = [];fs.readdir(path, (err, data) => { if (err) { console.log(err); return; } for (let i = 0; i < data.length; i++) { fs.stat(path + '/' + data[i], (error, stats) => { if (stats.isDirectory()) { dirArr.push(data[i]); } }) } console.log(dirArr); //[]})console.log(dirArr); //[] *///打印出 3个3// for (var i = 0; i < 3; i++) {// setTimeout(function () {// console.log(i);// }, 100)// }//1、改造for循环 递归实现 var path = './wwwroot';var dirArr = [];fs.readdir(path, (err, data) => { if (err) { console.log(err); return; } (function getDir (i) { if (i == data.length) { //执行完成 console.log(dirArr); return; } fs.stat(path + '/' + data[i], (error, stats) => { if (stats.isDirectory()) { dirArr.push(data[i]); } getDir(i + 1) }) })(0)})// 2、nodejs里面的新特性 async await//1、定义一个isDir的方法判断一个资源到底是目录还是文件async function isDir(path) { return new Promise((resolve,reject) => { fs.stat(path, (error, stats) => { if (error) { console.log(error); reject(error) return; } if (stats.isDirectory()) { resolve(true); } else { resolve(false); } }) })}//2、获取wwwroot里面的所有资源 循环遍历 function main(){ var path='./wwwroot' var dirArr=[]; fs.readdir(path,async (err,data)=>{ //注意 if(err){ console.log(err); return; } for(var i=0;i12、fs.createReadStream 从文件流中读取数据
const fs=require('fs');var readStream=fs.createReadStream('./data/input.txt');var count=0;var str='';readStream.on('data',(data)=>{ str+=data; count++;})readStream.on('end',()=>{ console.log(str); console.log(count)})readStream.on('error',(err)=>{ console.log(err); })13、fs.createWriteStream 写入文件
var fs = require("fs"); var data = '我是从数据库获取的数据,我要保存起来'; // 创建一个可以写入的流,写入到文件 output.txt 中 var writerStream = fs.createWriteStream('output.txt'); // 使用 utf8 编码写入数据 writerStream.write(data,'UTF8'); // 标记文件末尾 writerStream.end(); // 处理流事件 --> finish 事件writerStream.on('finish', function() { /*finish - 所有数据已被写入到底层系统时触发。*/ console.log("写入完成。"); }); writerStream.on('error', function(err){ console.log(err.stack); }); console.log("程序执行完毕");14、管道流
管道提供了一个输出流到输入流的机制。通常我们用于从一个流中获取数据并将数据传 递到另外一个流中。
var fs = require("fs"); // 创建一个可读流 var readerStream = fs.createReadStream('input.txt'); // 创建一个可写流 var writerStream = fs.createWriteStream('output.txt'); // 管道读写操作 // 读取 input.txt 文件内容,并将内容写入到 output.txt 文件中 readerStream.pipe(writerStream); console.log("程序执行完毕");读到这里,这篇"Nodejs的fs模块怎么使用"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。
目录
文件
代码
成功
数据
内容
模块
数组
文章
权限
管道
移动
事件
参数
文件夹
方法
服务器
程序
资源
还是
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
剑侠世界2手游数据库
网络安全报警电话号码
国际教育系列全文数据库
西安三星公司软件开发工资
初一英语视频软件开发
摊销软件开发无形资产分录
天津软件开发服务标准
ipad无法激活服务器
数据结构 数据库 课程
数据库逻辑设计与特定的dbms
数据库中的基本运算不包括
青岛定制软件开发流程
wbe服务器硬件结构图
软件开发销售项目需要立项吗
华为云服务器抢不到
成都华畴网络技术公司
浙江通用软件开发
医学实时数据库有哪些数据库
服务器管理器解析
大成老旧刊全文数据库
福山区安卓软件开发推荐
登录cnki数据库
无人机飞行控制软件开发
多媒体与网络技术有关吗
康德软件开发有限公司怎么样
小程序连接本地数据库测试
刀剑2 数据库修改
青岛好搜网络技术有限公司
网络机柜不能安装服务器吗
主流的软件开发语言