node篇-fs模块儿

news2024/9/28 23:36:35

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());
        //判断是不是目录 是则返回true
        console.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和await
  await 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.coloradmin.cn/o/586700.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华硕天选4R FA617原装Windows11原厂预装系统工厂模式恢复安装带 ASUSRecevory 一键还原22H2版本

华硕天选4R FA617X原装Windows11原厂预装系统工厂模式恢复安装带ASUSRecevory一键还原 文件地址:https://pan.baidu.com/s/1Pq09oDzmFI6hXVdf8Vqjqw?pwd3fs8 提取码:3fs8 华硕工厂恢复系统 ,安装结束后带隐藏分区以及机器所有驱动软件 需准备一个16…

浅谈NoSQL数据库

数据库 数据库,又称为数据管理系统,是处理的数据按照一定的方式储存在一起,能够让多个用户共享、尽可能减小冗余度的数据集合,简而言之可视为电子化的文件柜——存储电子文件的处所。 数据库有:Oracle数据库、ACCESS数…

代码随想录算法训练营第四十五天 | 力扣 70. 爬楼梯(进阶), 322. 零钱兑换, 279.完全平方数

70. 爬楼梯(进阶) 题目 70. 爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 改为:一步一个台阶,两个台阶,三个台阶&#xff…

【浅学 JDBC】

浅学JDBC 笔记记录 一、1. JDBC的概念2. JDBC快速入门2.1 DriverManager2.2 Connection2.3 Statement2.4 ResultSet 3. JDBC入门案例使用3.1 查询所有学生信息3.2 根据id查询学生信息&&新增学生信息&&修改学生信息&&删除学生信息 一、 1. JDBC的概念 …

中科易安8周年,与你相约联网智能门锁

中科易安与物联网技术发展同频 持续推动安防信息化建设 打造多场景应用的数智化通行解决方案 促进技术与安全精准对接 联网智能门锁技术硬核 中科易安打造集NB-IoT、Sub-1G Cat.1、Wifi、RS485和BLE 5.0 在内的六大通信技术组网方案 以“联网”赋能智能门锁 实现通行数…

C++11之atomic原子操作

atomic介绍 多线程间是通过互斥锁与条件变量来保证共享数据的同步的,互斥锁主要是针对过程加锁来实现对共享资源的排他性访问。很多时候,对共享资源的访问主要是对某一数据结构的读写操作,如果数据结构本身就带有排他性访问的特性&#xff0c…

chatgpt赋能python:Python中的等待:理解和优化

Python中的等待:理解和优化 Python是一种强大的编程语言,在构建各种应用程序时很常用。但是,随着应用程序越来越复杂,需要等待一些操作时,Python中的等待传统上会导致性能下降。在这篇文章中,我们将深入了…

可持续能源技术改变世界

文章目录 一、你在工作或生活中接触过可持续能源技术吗?可以分享下你的经历与看法。二、你认为可持续能源技术的优势和挑战有哪些?三、你了解过可持续能源技术的应用现状吗?四、对于可持续能源技术真的否改变世界这个问题你怎么看&#xff1f…

ifconfig工具与驱动交互解析(ioctl)

Linux ifconfig(network interfaces configuring) Linux ifconfig命令用于显示或设置网络设备。ifconfig可设置网络设备的状态,或是显示目前的设置。同netstat一样,ifconfig源码也位于net-tools中。源码位于net-tools工具包中&am…

《消息队列高手课》课程笔记(七)

如何使用异步设计提升系统性能? 异步设计如何提升系统性能? 假设我们要实现一个转账的微服务 Transfer(accountFrom, accountTo, amount),这个服务有三个参数:分别是转出账户、转入账户和转账金额。 这个例子的实现过程中&…

chatgpt赋能python:Python中如何反转字符串:三种简单方法

Python中如何反转字符串:三种简单方法 当我们在处理字符串时,有时需要将其反向排列。在Python中,这可以通过以下三种简单方法实现: 1. 使用内置的切片方法 在Python中,可以使用字符串的切片方法将其反转。这种方法非…

(浙大陈越版)数据结构 第三章 树(上) 3.4 小白专场:树的同构(PTA编程题讲解)

题意理解和二叉树表示 给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换变成T2,则称两棵树是“同构”的。 eg1:现请你判断如下两棵树(左侧为T1,右侧为T2)是否为同构树? 显然T1可以通过有限次左右孩子…

REST风格 -- SpringMVC入门保姆级教程(四)

文章目录 前言四、REST风格1.了解REST风格2.REST风格写法一般步骤3.REST风格快速开发4.REST风格中的注解5. 案例:基于REST风格页面数据交互 总结 前言 为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然&#…

Redis高级篇 - 分布式缓存

分布式缓存 基于Redis集群解决单机Redis存在的问题 单机的Redis存在四大问题: 1.Redis持久化 Redis有两种持久化方案: RDB持久化AOF持久化 1.1.RDB持久化 RDB全称Redis Database Backup file(Redis数据备份文件)&#xff0c…

iPad触屏笔哪个牌子好用?Apple Pencil的平替笔

从无纸化的广泛使用,电容笔成为无纸化中不可替代的一部分。但由于原装电容笔的昂贵,市面上的电容笔品牌众多,不知如何下手,今天给大家推荐几款好用又平价的Apple Pencil平替笔。顺便给不知道如何挑选电容笔的小伙伴科普一下电容笔…

车载网络测试 - CANCANFD - 基础篇_02

目录 七、与CAN总线相关的标准 1、ISO 11898,ISO16845 2、SAE J1939,ISO 11783,NMEA 2000,CANopen 3、ISO15765/ISO14229 4、ISO 17356/OSEK 5、CCP(CAN Calibration Protocol) 6、GMLAN,VWTP,FNOS,DCNet,MCNet 八、CAN总线的特点 九、CAN总线基本概念 七、与CAN总线相…

机器学习-4 决策树算法

决策树算法 算法概述分类算法与分类器决策树算法树模型决策树的原理决策树算法的关键决策树构造的基本思路 算法基本思想决策树的训练与测试三种经典的决策树生成算法基于信息增益的ID3算法基于信息增益率的C4.5算法C4.5算法C5.0算法 基于基尼系数的CART算法 算法流程算法关键问…

chatgpt赋能python:Python中的包

Python中的包 对于使用Python进行编程的开发者来说,包是一个非常重要的概念。包可以看作是一个包含了多个模块的文件夹,这些模块可以在代码中使用。通过使用Python中的包,开发者可以使代码更加模块化,提高代码的可维护性和可读性…

Emacs之git操作(一百零五)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

Apache Impala(1):Impala简介

1 Impala 基本介绍 impala 是 cloudera 提供的一款高效率的 sql 查询工具,提供实时的查询效果,官方测试性能比 hive 快 10 到 100 倍,其 sql 查询比 sparkSQL 还要更加快速,号称是当前大数据领域最快的查询 sql 工具&#xff0c…