Node.js核心模块API之文件操作
参考:https://www.runoob.com/nodejs/nodejs-fs.html
异步I/O 1,文件操作 2,网络操作
在浏览器中也存在异步操作 1,定时任务 2,事件处理 3,Ajax回调处理
js的运行是单线程的,引入事件队列机制,进入事件队列的任务主要分两种: Node.js中异步执行的任务:1,文件读写操作(文件I/O) 2,网络的请求相应处理(网络I/O)
Node.js中的事件模型与浏览器中的事件模型类型:单线程+事件队列,js的运行是单线程的,Node.js的环境是多线程的
一、获取文件信息
通过异步模式获取文件信息的语法格式
fs.stat(path, callback)
fs.stat(path)执行后,会将stats类的实例返回给其回调函数。可以通过stats类中的提供方法判断文件的相关属性。例如判断是否为文件:
常用方法:
| stats.isFile() | 如果是文件返回 true,否则返回 false。 |
| stats.isDirectory() | 如果是目录返回 true,否则返回 false。 |
var fs = require('fs');
fs.stat('01.js', function(err, stats) {
if(err) return;
console.log(stats);
if(stats.isFile()){
console.log('文件');
} else if(stats.isDirectory()){
console.log('目录');
}
});
返回结果:
atime 文件访问时间
ctime 文件状态信息发生变化的时间,比如文件的权限
mtime文件数据发生变化的时间
birthtime文件创建时间
Stats {
dev: 3963844000,
mode: 33206,
nlink: 1,
uid: 0,
gid: 0,
rdev: 0,
blksize: 4096,
ino: 7599824371308861,
size: 326,
blocks: 0,
atimeMs: 1621577436001.767,
mtimeMs: 1621577434724.8518,
ctimeMs: 1621577434728.6726,
birthtimeMs: 1621505236836.661,
atime: 2021-05-21T06:10:36.002Z,
mtime: 2021-05-21T06:10:34.725Z,
ctime: 2021-05-21T06:10:34.729Z,
birthtime: 2021-05-20T10:07:16.837Z
}
文件
二、读文件操作
var path = require('path');
var strpath = path.join(__dirname, '02.json');
// 如果没有设置编码方式,那么得到的是Buffer对象,需要进行转换
fs.readFile(strpath, 'utf-8', function(err, data){
console.log(data);
});
三、写文件操作
异步模式下写入文件的语法格式:
fs.writeFile(file, data[, options], callback)
writeFile 直接打开文件默认是 w 模式,所以如果文件存在,该方法写入的内容会覆盖旧的文件内容。
var fs = require("fs");
console.log("准备写入文件");
fs.writeFile('input.txt', '我是通 过fs.writeFile 写入文件的内容', function(err) {
if (err) {
return console.error(err);
}
console.log("数据写入成功!");
console.log("--------我是分割线-------------")
console.log("读取写入的数据!");
fs.readFile('input.txt', function (err, data) {
if (err) {
return console.error(err);
}
console.log("异步读取文件数据: " + data.toString());
});
});
执行结果:
$ node file.js
准备写入文件
数据写入成功!
--------我是分割线-------------
读取写入的数据!
异步读取文件数据: 我是通 过fs.writeFile 写入文件的内容
四、大文件操作(流式操作)
这个只能处理内容量较少的文件,会读取全部内容,将内容加载到内存
fs.createReadStream(path[, options]) 返回ReadStream 对象。
fs.createWriteStream(path[, options]) 返回 WriteStream 对象。
var path = require('path');
var fs = require('fs');
// 源路径
var spath = path.join(__dirname, '../doc', 'css.md');
// 目标路径
var dpath = path.join('D:\\Users\\peiyuli\\Desktop', 'css.md');
var readStream = fs.createReadStream(spath);
var writeStream = fs.createWriteStream(dpath);
var sum = 0;
// 基于事件的处理方式 以chunk(块)为单位,每次读取文件大小时会触发data事件
readStream.on('data', function(chunk){
sum++;
writeStream.write(chunk);
});
// 数据处理完成标志 end事件
readStream.on('end', function(){
console.log('文件处理完成', sum);
});
方法二、简化流程
var path = require('path');
var fs = require('fs');
// 源路径
var spath = path.join(__dirname, '../doc', 'css.md');
// 目标路径
var dpath = path.join('D:\\Users\\peiyuli\\Desktop', 'css.md');
// 管道方法 将读取流和写入流融合到一块
fs.createReadStream(spath).pipe(fs.createWriteStream(dpath));
五、目录的操作
fs.mkdir(path[, options], callback) 创建目录
fs.mkdir(path.join(__dirname, 'abc'), function(err){
console.log(err);
});
执行结果:生成了abc目录

fs.readdir(path[, options], callback) 读取目录
var path = require('path');
var fs = require('fs');
fs.readdir(__dirname, function(err, files){
console.log(files);
files.forEach(function(item, index){
// 获取文件信息
fs.stat(path.join(__dirname, item), function(err, stat){
// 判断是否为文件
if(stat.isFile()){
console.log(item, '文件');
} else if(stat.isDirectory()){ // 判断是否为目录
console.log(item, '目录');
}
});
});
});
执行结果:

fs.rmdir(path[, options], callback) 删除目录
fs.rmdir(path.join(__dirname, 'abc'), function(err){
console.log(err);
});
Node.js核心模块API之文件操作的更多相关文章
- Node.js核心模块-fs文件系统
fs是file-system的简写,文件系统的意思.在Node中如果想要进行文件操作,就必须引入fs这个核心模块. 引入 const fs = require('fs') fs.readFile(pa ...
- node.js核心模块
全局对象 global 是全局变量的宿主 全局变量 在最外层定义的 全局对象的属性 隐士定义的变量(未定义直接赋值的变量) 当定义一个全局变量时 这个变量同时也会成为全局对象的属性 反之亦然 注意: ...
- 10.Node.js核心模块
1.全局对象2.常用工具3.事件机制4.文件系统访问5.HTTP服务与客户端 一.全局对象(Global Object), 与window对象一样 process ==> 全局变量, 描述当前N ...
- Node.js核心模块_全局变量、util学习
全局对象 javascript的全局对象是window,他及其所有属性都可以在程序的任何地方访问.即全局变量. 而在node中全局对象是global,所有全局变量都是global对象的属性,包括其本身 ...
- Node.js核心模块-http
通过node中的http模块可以创建编写服务器 引入 const http = require('http') http举例使用: const http = require('http') //引入 ...
- Node.js核心模块-net
net.Socket 类 socket.remotePort 访问服务器的远程端口 const http = require('http'); const server = http.createSe ...
- Node.js的模块载入方式与机制
Node.js中模块可以通过文件路径或名字获取模块的引用.模块的引用会映射到一个js文件路径,除非它是一个Node内置模块.Node的内置模块公开了一些常用的API给开发者,并且它们在Node进程开始 ...
- 36.Node.js 工具模块--OS模块系统操作
转自:http://www.runoob.com/nodejs/nodejs-module-system.html Node.js os 模块提供了一些基本的系统操作函数.我们可以通过以下方式引入该模 ...
- 37.Node.js工具模块---处理和转换文件路径的工具 Path模块
转自:http://www.runoob.com/nodejs/nodejs-module-system.html Node.js path 模块提供了一些用于处理文件路径的小工具,我们可以通过以下方 ...
随机推荐
- (十四--十五)数据库查询优化Part I
(十四--十五)数据库查询优化Part I 如果理解的有问题.欢迎大家指出.这也是我在看课记得笔记..可能会有很多问题 查询优化的重要性 请记住用户只会告诉DMBS他们想要什么样的结果,而不会告诉他们 ...
- IOC容器模拟实现
运用反射机制和自定义注解模拟实现IOC容器,使其具有自动加载.自动装配和根据全限定类名获取Bean的功能. 一. 实现原理 1-1 IOC容器的本质 IOC容器可理解为是一个map,其中的一个entr ...
- Codeforces1114C. Trailing Loves (or L'oeufs?)-(质因子分解)
题目大意: 求n!转化为b进制后后导0的个数 思路: 我们首先考虑十进制转化为二进制者后,后导0的个数如何求 十进制数num y = num%2 num/=2 如果y为0则,该位为0,就是求num能连 ...
- go的令牌桶实现库 go-rate
关于我 我的博客|文章首发 go-rate是速率限制器库,基于 Token Bucket(令牌桶)算法实现. go-rate被用在LangTrend的生产中 用于遵守GitHub API速率限制. 速 ...
- DAOS 分布式异步对象存储|相关组件
DAOS 的安装涉及多个组件,这些组件可以是集中式的,也可以是分布式的. DAOS 软件定义存储 (software-defined storage, SDS) 框架依赖于两种不同的通信通道: 用于带 ...
- springcloud面试题【第一期】
全文目录 1:谈一谈你对微服务的理解? 2:微服务之间是如何独立进行通讯的? 3:springcloud和dubbo有哪些区别? 4:springboot和spring cloud得区别? 5:Eur ...
- 将一个字符串进行反转:将字符串中指定部分进行反转。比如“abcdefg”反转为”abfedcg”
将一个字符串进行反转:将字符串中指定部分进行反转.比如"abcdefg"反转为"abfedcg"方式一:转换为char[] public String reve ...
- Git分支及其协同开发
目录 Git分支 Git是如何保存数据的 Git分支的本质 Git分支的操作 远程仓库与本地仓库分支开发 一个项目多个远程仓库 远程仓库操作命令 协同开发 Git flow工作流 GitLub安装搭建 ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(六)——一步一步教你如何撸Dapr之Actor服务
我个人认为Actor应该是Dapr里比较重头的部分也是Dapr一直在讲的所谓"stateful applications"真正具体的一个实现(个人认为),上一章讲到有状态服务可能很 ...
- js的13种继承
js继承的13种方式 也可以说只有12种,ES6的extend 也是12种方法之一-寄生继承的语法糖 1.原型链法 代码示例 Child.prototype = new Parent(); 所属模式: ...