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 模块提供了一些用于处理文件路径的小工具,我们可以通过以下方 ...
随机推荐
- 当初自学C++时的笔记记录
编辑:刘风琛 最初编写日期:2020年4月11日下午 最新更新日期:2020年9月20日上午 标注: 从笔记开始截止到程序第四章"程序流程结构",使用Joplin编写,其余部分为T ...
- 如何在IDEA中进行时序图分析
方法一: 使用插件 SequenceDiagram (系统自动生成) 使用方法: 下载插件,我们可以在 Plugins 中找到 选中线程方法名,然后右键就可以创建此方法的时序图了 参数设置 生成效果以 ...
- python基础(补充):递归的深度
我们在正经人谁用递归呀一节中,简单的讨论了python中的递归 相信用过python递归的朋友可能都碰到过: RecursionError: maximum recursion depth excee ...
- 从一个Demo开始,揭开Netty的神秘面纱
本文是Netty系列第5篇 上一篇文章我们对于I/O多路复用.Java NIO包 和 Netty 的关系有了全面的认识. 到目前为止,我们已经从I/O模型出发,逐步接触到了Netty框架.这个过程中, ...
- 自动化kolla-ansible部署ubuntu20.04+openstack-victoria之镜像制作win2008r2-19
自动化kolla-ansible部署ubuntu20.04+openstack-victoria之镜像制作win2008r2-19 欢迎加QQ群:1026880196 进行交流学习 制作OpenSta ...
- shell脚本 5 sed和awk
文本处理三剑客 在 Shell 下使用这些正则表达式处理文本最多的命令有下面几个工具: 命令 描述 grep 默认不支持扩展表达式,加-E 选项开启 ERE.如果不加-E 使用花括号要加转义符\{\} ...
- C++ sort()函数使用简介
Sort函数简介 sort()函数是C++的一个排序函数,可以对传入参数给定的区间的所有元素进行排序,默认是升序,也可以是降序,如果需要其他排序规则需要自行编写compare()函数作为参数. ...
- 2021软工-CSDN APP分析
项目 内容 这个作业属于哪个课程 2021春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 案例分析作业要求 我在这个课程的目标是 提升软件开发能力,提高团队协作能力 这个作业在哪个具体方面 ...
- hdu3594 强连通 tarjan
题意: 判断是不是强连通图 ,同时每一条边必须只能在一个环里 思路:之前我的强连通用的全是双深搜,结果题目的第二个要求很难判断,一开始写了三个深搜加上并查集,结果越写越乱,其实就是在判断一个边是否只在 ...
- Android Hook学习之ptrace函数的使用
Synopsis #include <sys/ptrace.h> long ptrace(enum __ptrace_request request, pid_t pid, void *a ...