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 模块提供了一些用于处理文件路径的小工具,我们可以通过以下方 ...
随机推荐
- Android Studio 之 在活动中使用 Toast
•简介 Toast 是 Android 系统提供的一种非常好的提醒方式: 在程序中可以使用它将一些短小的信息通知给用户: 这些信息会在一段时间内自动消失,并且不会占用任何屏幕空间 •Toast.mak ...
- 图像Resize方式对深度学习模型效果的影响
在基于卷积神经网络的应用过程中,图像Resize是必不可少的一个步骤.通常原始图像尺寸比较大,比如常见监控摄像机出来的是1080P高清或者720P准高清画面,而网络模型输入一般没有这么大,像Yolo系 ...
- Rancher 安装和使用-实践
Rancher 安装和使用 Rancher是一个完整的,开源的平台,用于在生产环境中部署和管理容器.它包括Kubernetes,Mesos和Docker Swarm的商业支持发行版,使得在任何基础架构 ...
- centos 7升级gcc到10.2.0
安装gcc 由于 Linux 操作系统的自由.开源,在其基础上衍生出了很多不同的 Linux 操作系统,如 CentOS.Ubuntu.Debian 等.这些 Linux 发行版中,大多数都默认装有 ...
- 2021软工-调研作业-Notion
2021软工-调研作业-Notion 项目 内容 这个作业属于哪个课程 2021春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 案例分析作业要求 我在这个课程的目标是 学习软件开发的工业化 ...
- 数据库MySQL一
P252 1.MySQL 最为主要使用的数据库 my sequel 不容易查找数据 DB数据库 存储数据的仓库,它保存了一系列有组织的数据 DBMS数据库管理系统,数据库是通过DBMS创建和操作的容器 ...
- 自学转行JAVA,没有项目经历怎么找工作?
应届生或者是刚参加工作的转行人员都有这样一个疑惑,刚学出来没有工作经验,但是企业又要求你必须要有工作经验,但是刚毕业找不到工作就不可能有工作经验,感觉陷入一个死循环.其实这种情况那些企业是不可能不知道 ...
- 自动化kolla-ansible部署ubuntu20.04+openstack-victoria之镜像制作ubuntu16.04-16
自动化kolla-ansible部署ubuntu20.04+openstack-victoria之镜像制作ubuntu16.04-16 欢迎加QQ群:1026880196 进行交流学习 制作Ope ...
- Go-30-main包
main包 package main import ( "fmt" "kubeflow-tool/main/cmd" "os" ) func ...
- Digit Counting UVA - 1225
Trung is bored with his mathematics homeworks. He takes a piece of chalk and starts writing a sequ ...