nodejs入门教程20:nodejs文件系统

1. 引入fs模块

在Node.js中,你可以通过以下方式引入fs模块:

const fs = require('fs');

2. 文件操作

读取文件
  • 异步读取:使用fs.readFile()方法。该方法接收文件路径和回调函数作为参数,回调函数在文件读取完成后被调用。
fs.readFile('example.txt', 'utf8', (err, data) => {if (err) throw err;console.log(data);
});
  • 同步读取:使用fs.readFileSync()方法。该方法会阻塞程序直到文件读取完成。
try {const data = fs.readFileSync('example.txt', 'utf8');console.log(data);
} catch (err) {console.error('Error reading file:', err);
}
写入文件
  • 异步写入:使用fs.writeFile()方法。该方法接收文件路径、要写入的内容和回调函数作为参数。
const content = 'Hello, World!';
fs.writeFile('example.txt', content, 'utf8', (err) => {if (err) throw err;console.log('File has been written successfully.');
});
  • 同步写入:使用fs.writeFileSync()方法。该方法会阻塞程序直到文件写入完成。
const content = 'Hello, World!';
fs.writeFileSync('example.txt', content, 'utf8');
console.log('File has been written successfully.');
追加内容到文件
  • 异步追加:使用fs.appendFile()方法。如果文件不存在,则会创建文件。
const additionalContent = '\nThis is additional content.';
fs.appendFile('example.txt', additionalContent, 'utf8', (err) => {if (err) throw err;console.log('Content has been appended successfully.');
});
  • 同步追加:使用fs.appendFileSync()方法。
const additionalContent = '\nThis is additional content.';
fs.appendFileSync('example.txt', additionalContent, 'utf8');
console.log('Content has been appended successfully.');

3. 目录操作

创建目录
  • 异步创建:使用fs.mkdir()方法。如果要创建多级目录,可以将recursive选项设置为true
fs.mkdir('new_directory', { recursive: true }, (err) => {if (err) throw err;console.log('Directory created!');
});
  • 同步创建:使用fs.mkdirSync()方法。
fs.mkdirSync('new_directory', { recursive: true });
console.log('Directory created!');
读取目录内容
  • 异步读取:使用fs.readdir()方法。该方法返回目录中的文件和子目录名。
fs.readdir('directory_path', (err, files) => {if (err) throw err;console.log(files);
});
  • 同步读取:使用fs.readdirSync()方法。
try {const files = fs.readdirSync('directory_path');console.log(files);
} catch (err) {console.error('Error reading directory:', err);
}
删除目录
  • 异步删除:使用fs.rmdir()方法。该方法只能删除空目录。要删除非空目录,可以使用fs.rm()方法并将recursive选项设置为true
// 删除空目录
fs.rmdir('empty_directory', (err) => {if (err) throw err;console.log('Directory deleted!');
});// 删除非空目录
fs.rm('non_empty_directory', { recursive: true }, (err) => {if (err) throw err;console.log('Directory and its content deleted!');
});
  • 同步删除:使用fs.rmdirSync()方法(仅适用于空目录)或fs.rmSync()方法(可递归删除非空目录)。
// 删除空目录
fs.rmdirSync('empty_directory');
console.log('Directory deleted!');// 删除非空目录
fs.rmSync('non_empty_directory', { recursive: true });
console.log('Directory and its content deleted!');

4. 文件与目录的信息查询

  • 检查文件或目录是否存在:使用fs.access()方法。该方法不会返回文件或目录的状态,而是根据提供的模式检查文件或目录是否存在。
fs.access('example.txt', fs.constants.F_OK, (err) => {if (err) {console.log('File does not exist!');} else {console.log('File exists!');}
});
  • 获取文件信息:使用fs.stat()方法。该方法返回一个包含文件或目录状态的对象。
fs.stat('example.txt', (err, stats) => {if (err) throw err;console.log(`File size: ${stats.size} bytes`);console.log(`Creation time: ${stats.ctime}`);
});
  • 获取目录内容:如上所述,使用fs.readdir()fs.readdirSync()方法。

5. 流式文件操作

对于大文件或需要逐步处理的文件,使用流式操作更加高效。Node.js提供了四种流:可读流(Readable)、可写流(Writable)、双向流(Duplex)和转换流(Transform)。

// 创建可读流
const readStream = fs.createReadStream('largeFile.txt', 'utf8');// 创建可写流
const writeStream = fs.createWriteStream('largeFileCopy.txt');// 使用管道将可读流连接到可写流
readStream.pipe(writeStream);// 处理流事件
readStream.on('data', (chunk) => {console.log(`Received ${chunk.length} bytes of data.`);
});readStream.on('end', () => {console.log('No more data in readable stream.');
});writeStream.on('finish', () => {console.log('Write completed.');
});

6. 注意事项

  • 异步操作:Node.js的文件系统操作默认是异步的,这有助于保持应用的响应性。在可能的情况下,优先使用异步API。
  • 错误处理:在进行文件系统操作时,务必处理可能发生的错误,以避免应用崩溃。
  • 权限检查:在操作文件或目录之前,确保具有相应的权限。
  • 路径操作:使用path模块来处理文件路径,以避免因路径问题导致的错误。

通过上述教程,你可以掌握Node.js文件系统的基本操作,从而在处理文件和目录时更加得心应手。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/59140.shtml

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

相关文章

使用AWS Redshift从AWS MSK中读取数据

Amazon Redshift 流式摄取的目的是简化将流式数据直接从流式服务摄取到 Amazon Redshift 或 Amazon Redshift Serverless 的过程。 官方文档[1]中有详细步骤。用unauthenticated, IAM 的方式均可以进行连接,只不过使用的是不同端口:9092或者9098 [1] h…

2-3-4树的层序打印

234树 接前面0到100与B树比较0到50镜像代码更新随机测试后话接前面 红黑树转2-3-4树打印失败的地方。 0到100 这个是应该的样子 >>> rb = RBT() >>> for k in range(100):rb.INSERT(k) >>> t=tree234(rb.root) >>> t.print() 结点类型…

了解AIGC——文本生成技术在新闻媒体中的应用

了解AIGC:文本生成技术在新闻媒体中的应用 引言 生成式人工智能内容(AI-Generated Content,简称AIGC)在新闻媒体中的应用已经成为技术革新和内容创作的主要方向之一。新闻行业长期依赖于人类记者和编辑的创造力,而AI…

UBUNTU查看CPU核心数

UBUNTU查看CPU核心数 前言一、使用lscpu命令1. 执行命令2. 查看输出 二、使用/proc/cpuinfo文件1. 查看文件2. 解释输出 三、使用nproc命令1. 执行命令2. 查看输出 四、使用htop或top工具1. 使用htop2. 使用top 五、使用inxi命令1. 执行命令2. 查看输出 六、使用图形界面工具1.…

机器学习线性回归

文章目录 1.基本概念2.最小二乘法3.用代码来表示线性回归 1.基本概念 线性回归是一种统计方法,用于分析两个或多个变量之间的关系。其主要目的是通过建立一个线性模型来预测一个因变量(或称为目标变量)与一个或多个自变量(或称为…

基于Openwrt系统架构,实现应用与驱动的实例。

一、在openwrt系统架构,编写helloworld的应用程序。 第一步先创建目录,项目代码要放在 openwrt根目下的 package 目录中,这里源码写在了 hellworld 的 src 目录下,因为外层还有需要编写的文件。 mkdir -p ~/openwrt/package/hel…

C++ STL 学习指南:带你快速掌握标准模板库

🌟快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。 🌟 大家好呀!🤗 今天我们来聊一聊 C 程序员的必备神器——STL(Standard Template Library&#xf…

牛客练习赛131 (待补

A 小H学语文 (贪心) 题意:给定n个木板,1~n长度为h[i],选则m块木板,使m*m*h(min) 最大 思路:贪心的(将木板降序排列后)从n到1(越多越好)枚举木板…

挑战Java面试题复习第5天,无人扶我青云志

挑战第 5 天 java反射List Set Map 区别Object 常用方法 java反射 定义: 运行时动态获取类信息和调用方法的特性。 应用场景: JDBC数据库连接。框架如Hibernate和Struts等。 实现方式: 通过四种方法获取Class对象: Class.fo…

Oracle视频基础1.3.5练习

Oracle视频基础1.3.4练习 1.3.5 检查数据库启动状态 ps -ef | grep oracle ipcs clear演示alter向前向后改database阶段 sqlplus /nolog conn / as sysdba startup mount alter database nomount # 报错 alter database open启动restricted mode,创建一个connect&…

Unity3D包管理bug某些版本Fbx Exporter插件无法搜索到的问题

这个问题是在使用unity的时候发现的 有些版本里没有Fbx Exporter插件也是没法搜到 经过测试,在package manager中开启Enable Preview Packages也没有用 这个插件在2020已经是正式版了,不需要再开启 后来发现可能是版本bug 需要手动开启 在工程的Pac…

深度学习-学习率调整策略

在深度学习中,学习率调整策略(Learning Rate Scheduling)用于在训练过程中动态调整学习率,以实现更快的收敛和更好的模型性能。选择合适的学习率策略可以避免模型陷入局部最优、震荡不稳定等问题。下面介绍一些常见的学习率调整策…

【MogDB】MogDB5.2.0重磅发布第五篇-支持部分ORACLE的HINT

一、背景 ORACLE的SQL优化器非常强大,但是仍然会在某些情况下,ORACLE自动生成的执行计划并不是很好,此时可以通过在SQL中增加HINT来人工控制执行计划应该怎么走。在ORACLE迁移到国产库的过程中,由于部分国产库并不支持ORACLE的HI…

U盘引导丢失问题的处理办法

项目背景:在使用自制的u盘系统的时候经常遇到引导丢失的问题,那么咱们怎么解决这个问题呢,首先第一步通过手动引导u盘 进入系统,同时再进行引导区的修复这样u盘系统就可以正常工作了。 1 进入grub 的提示符下面,首先…

Caffeine 手动策略缓存 put() 方法源码解析

BoundedLocalManualCache put() 方法源码解析 先看一下BoundedLocalManualCache的类图 com.github.benmanes.caffeine.cache.BoundedLocalCache中定义的BoundedLocalManualCache静态内部类。 static class BoundedLocalManualCache<K, V> implements LocalManualCache&…

树莓派开发相关知识四 传感器-测距C语言版本

1、封装调用函数 #include <stdio.h> #include <time.h> #include "wiringPi.h"void initmode(int trig,int echo) {wiringPiSetupGpio();pinMode(trig,OUTPUT);digitalWrite(trig,LOW);pinMode(echo,INPUT); }double get_distance(int trig,int echo) …

《Qwen2-VL》论文精读【上】:发表于2024年10月 Qwen2-VL 迅速崛起 | 性能与GPT-4o和Claude3.5相当

1、论文地址Qwen2-VL: Enhancing Vision-Language Model’s Perception of the World at Any Resolution 2、Qwen2-VL的Github仓库地址 该论文发表于2024年4月&#xff0c;是Qwen2-VL的续作&#xff0c;截止2024年11月&#xff0c;引用数24 文章目录 1 论文摘要2 引言3 实验3.…

StandardThreadExecutor源码解读与使用(tomcat的线程池实现类)

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;Java源码解读-专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 目录 目录 1.前言 2.线程池基础知识回顾 2.1.线程池的组成 2.2.工作流程 2…

Spring学习笔记_21——循环依赖

循环依赖 1. 介绍 在Spring中的循环依赖就是指一个或者多个Bean之间存在着互相依赖的关系&#xff0c;并且形成了循环调用。 例如&#xff1a;在Spring中&#xff0c;Bean-A依赖Bean-B&#xff0c;Bean-B又依赖Bean-A&#xff0c;Bean-A和Bean-B之间就形成了相互依赖的关系。…

前端埋点与监控最佳实践:从基础到全流程实现.

前端埋点与监控最佳实践&#xff1a;从基础到全流程实现 大纲 我们会从以下三个方向来讲解埋点与监控的知识&#xff1a; 什么是埋点&#xff1f;什么是监控&#xff1f; JS 中实现监控的核心方案 写一个“相对”完整的监控实例 一、什么是埋点&#xff1f;什么是监控&am…