node篇-fs模块儿

news/2024/11/28 15:49:41/

nodejs-fs模儿

异步

1. mkdir() 创建一个目录

// 1.mkdir 创建一个目录,回调函数的参数含义:err 
const fs = require('fs');
fs.mkdir('./avater',(err)=>{console.log(err);if(err && err.code === 'EEXIST'){console.log('当前目录已经存在')}
}) 

在这里插入图片描述

当我们的目录下没有这个名字的文件夹,回调函数的err会返回null并创建好这个目录

在这里插入图片描述

如果目录下已经存在这个文件夹,则也会返回一串信息(Error Exist)

在这里插入图片描述

2. rename(‘原文件夹’,‘新文件夹名字’,回调函数)

// rename 给文件重新命名
const fs = require('fs');// rename('要改名字的文件','要改为的文件新的名字',回调函数)
fs.rename('./avater','./avater3',(err)=>{console.log(err);
})

在这里插入图片描述
在这里插入图片描述

3.rmdir(‘目录名称’,回调函数) 删除目录
*注意: 如果当前目录里面没有其他文件是可以执行删除的,如果文件中有其他文件则是单单使用这个方法删除不了的(下面的内容会讲解如何删除目录下的所有文件以及目录)

// 删除目录
const fs = require('fs');fs.rmdir('./avater2',(err)=>{if(err && err.code === 'ENOENT'){console.log('目录不存在')}console.log(err);
})

4. writeFile 对文件进行写入操作

// writeFile 对文件进行写入操作
const fs = require('fs');fs.writeFile('./avater2/a.txt','hello world',(err)=>{console.log(err)
})

在这里插入图片描述

5. appendFile将内容追加到指定文件中

// appendFile将内容追加到指定文件中
const fs = require('fs');fs.appendFile('./avater2/a.txt','\nhello world2',(err)=>{console.log(err);
})

在这里插入图片描述

6. readFile 读取文件的内容

// readFile 读取文件的内容
const fs = require('fs');// err 总是在前,这种风格被称为err-first风格
fs.readFile('./avater2/a.txt','utf-8',(err,data)=>{
//可以指定曹勇哪种编码格式加在文件的内容// console.log()if(!err){console.log(data)}
})

7.读取目录 readdir

const fs = require('fs');
// 读取目录
fs.readdir('./avater2',(err,data)=>{if(!err){console.log(data);}
})

在这里插入图片描述

8. stat 查看目录信息
有两个重要方法,分别是isDirectory()和isFile()

const fs = require('fs');fs.stat('./avater2',(err,data)=>{if(!err){console.log(data.isDirectory());//判断是不是目录 是则返回trueconsole.log(data.isFile());//判断是不是文件 是则返回true 否则返回false}
})

在这里插入图片描述

9.练习以及派生–看到这里做一个练习,如有一个需求是我想某一个目录下的文件以及目录删除如何实现
分析: 删除文件以及该目录
step 1:先获取改路录下的文件名 使用 readir();
step 2 采用循环将获取到的文件信息删除 使用unlink(删除文件)
step 3. 当文件删除完了之后再删除目录

const fs = require('fs');// 引入fs模块儿fs.readdir('./avater2',(data)=>{//1. 读取目录信息console.log(data);data.forEach(item=>{//2. 删除目录下的文件fs.unlink(`./avater2/${item}`,(err)=>{console.log(err)})});//3. 当目录下的文件都删除掉后再删除目录fs.rmdir('./avater2');
});//其实这样写出来是有争议的,因为这些方法都是异步的方法,异步方法有个特点就是不会阻塞代码的执行我,我们怎么知道文件是什么时候可以删除完毕,然后再去执行删除目录的操作.

同步

上面讲解完了异步方法,上面的练习采用异步无法解决,其实我们可以采用同步的方法来解决,js是单线程的我们都知道,当同步的删除完文件的同步方法执行完毕后再执行删除目录的方法

const fs = require('fs');// 引入fs模块儿fs.readdir('./avater2',(err,data)=>{//1. 读取目录信息console.log(data);data.forEach(item=>{//2. 删除目录下的文件fs.unlinkSync(`./avater2/${item}`,(err)=>{console.log(err)})});//3. 当目录下的文件都删除掉后再删除目录fs.rmdir('./avater2',(err)=>{console.log(err)});
});

设想如果这个文件夹里面的特别多,而且与此同时还有其他的业务代码需要执行 js是单线程的长时间处理一个模块儿的代码会造成阻塞,那难道没有其他的方法解决这个问题了吗?答案是有的,我们知道promise是解决回调地狱(异步嵌套实现同步),我们可以使用fs模块儿的promise来采用已同步思想来处理异步

在这里插入图片描述

const fs = require('fs').promises
// fs promises 的每一个对象都是异步的
console.log(fs);
fs.readdir("./avater").then(async (data)=>{// 获取列表信信息let arr = [];data.forEach((item)=>{arr.push(fs.unlink(`./avater/${item}`));//arr接收所有promise对象})//  循环执行多个异步任务,可以使用promise.all([])来等待执行完毕await  Promise.all(arr); //等待所有任务执行完毕,可以搭配async和awaitawait fs.rmdir('./avater');
PS D:\node-学习\15-内置模块儿fs-同步> node .\test3.js       
{ access: [AsyncFunction: access],copyFile: [AsyncFunction: copyFile],open: [AsyncFunction: open],rename: [AsyncFunction: rename],truncate: [AsyncFunction: truncate],rmdir: [AsyncFunction: rmdir],mkdir: [AsyncFunction: mkdir],readdir: [AsyncFunction: readdir],readlink: [AsyncFunction: readlink],symlink: [AsyncFunction: symlink],lstat: [AsyncFunction: lstat],stat: [AsyncFunction: stat],link: [AsyncFunction: link],unlink: [AsyncFunction: unlink],chmod: [AsyncFunction: chmod],lchmod: [AsyncFunction: lchmod],lchown: [AsyncFunction: lchown],chown: [AsyncFunction: chown],utimes: [AsyncFunction: utimes],realpath: [AsyncFunction: realpath],mkdtemp: [AsyncFunction: mkdtemp],writeFile: [AsyncFunction: writeFile],appendFile: [AsyncFunction: appendFile],readFile: [AsyncFunction: readFile] }
PS D:\node-学习\15-内置模块儿fs-同步> node .\test3.js
{ access: [AsyncFunction: access],    copyFile: [AsyncFunction: copyFile],open: [AsyncFunction: open],        rename: [AsyncFunction: rename],    truncate: [AsyncFunction: truncate],rmdir: [AsyncFunction: rmdir],      mkdir: [AsyncFunction: mkdir],      readdir: [AsyncFunction: readdir],  readlink: [AsyncFunction: readlink],symlink: [AsyncFunction: symlink],  lstat: [AsyncFunction: lstat],      stat: [AsyncFunction: stat],        link: [AsyncFunction: link],unlink: [AsyncFunction: unlink],chmod: [AsyncFunction: chmod],lchmod: [AsyncFunction: lchmod],lchown: [AsyncFunction: lchown],chown: [AsyncFunction: chown],utimes: [AsyncFunction: utimes],realpath: [AsyncFunction: realpath],mkdtemp: [AsyncFunction: mkdtemp],writeFile: [AsyncFunction: writeFile],appendFile: [AsyncFunction: appendFile],readFile: [AsyncFunction: readFile] }
(node:15804) ExperimentalWarning: The fs.promises API is experimental

http://www.ppmy.cn/news/105095.html

相关文章

IDEA控制台tomcat 乱码

问题 IDEA控制台tomcat 乱码 详细问题 项目部署至tomcat上,启动tomcat,IDEA控制台终端Server日志,Tomcat Localhost日志,Tomcat Catalina日志乱码 Server日志 D:\tomcat9\bin\catalina.bat run [2023-05-29 11:20:24,521] Art…

Angular学习笔记:动画

本文是自己的学习笔记,主要参考资料如下。 - Angular官方文档:https://angular.io/guide/animations 1、前置工作1.1、导入依赖 2、代码部分2.1、有关的imports2.2、定义触发条件(trigger)2.3、定义状态(state&#…

【2023】华为OD机试真题全语言-题目0241-组合出合法最小数

题目0241-组合出合法最小数 题目描述 给一个数组,数组里面哦都是代表非负整数的字符串,将数组里所有的数值排列组合拼接起来组成一个数字,输出拼接成的最小的数字。 输入描述 一个数组,数组不为空,数组里面都是代表非负整数的字符串,可以是0开头,例如:["13&qu…

oracle--常用维护语句

1、sqlpus 连接 [rootdb-server ~]$su - oracle ##切换oracle用户 [oracledb-server ~]$ sqlplus /nolog ##启动客户端进程 SQL>conn zyl/zyl2022 ##普通用户登录 SQL>conn / as sysdba ##管理员登录 Connected. SQL> 2、启动或关闭数据库 SQL>startup…

SQL server入门一【简单介绍与简单建表】

SQLserver登录方式 Windows身份验证 用户名登录 通常登录名为sa,密码为下载时设置的密码 SQL server建立一个数据库 数据库中建表存储数据(输入命令建表) 数据库的简单介绍与概念 含义 可以对数据进行存储和管理的软件以及数据本身统称为数据库 组成 数据库由表…

用CSS来做一个动画案例

今天来做这么一个案例 添加一个动画实现上下渐变滚动的效果 首先还是我们HTML部分&#xff0c;一个大盒子装着五个子元素 下面别在意&#xff0c;之前写的时候看到有个网站有这么个注解我就复制了下来哈哈哈 <div class"loader"><div class"slider&…

vuex最详细笔记总结,这些东西你真的了解吗?

1.vuex是啥&#xff1f; 简单来说就是管理数据的,相当于一个仓库,里面存放着各种需要共享的数据,所有组件都可以拿到里面的数据 2.什么时候使用vuex 1.多个组件依赖于同一状态 2.来自不同组件的行为需要变更同一状态 总之&#xff0c;就是vuex作为一个仓库&#xff0c;任何组件…

Otsu阈值法原理及实现

文章目录 Otsu算法简介Otsu 算法的逻辑源码实现 欢迎访问个人网络日志&#x1f339;&#x1f339;知行空间&#x1f339;&#x1f339; Otsu算法简介 Otsu阈值法发表于1979年&#xff0c;论文为A threshold selection method from gray level histograms,作者是日本东京大学的…