参考: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之文件操作的更多相关文章

  1. Node.js核心模块-fs文件系统

    fs是file-system的简写,文件系统的意思.在Node中如果想要进行文件操作,就必须引入fs这个核心模块. 引入 const fs = require('fs') fs.readFile(pa ...

  2. node.js核心模块

    全局对象 global 是全局变量的宿主 全局变量 在最外层定义的 全局对象的属性 隐士定义的变量(未定义直接赋值的变量) 当定义一个全局变量时 这个变量同时也会成为全局对象的属性 反之亦然 注意: ...

  3. 10.Node.js核心模块

    1.全局对象2.常用工具3.事件机制4.文件系统访问5.HTTP服务与客户端 一.全局对象(Global Object), 与window对象一样 process ==> 全局变量, 描述当前N ...

  4. Node.js核心模块_全局变量、util学习

    全局对象 javascript的全局对象是window,他及其所有属性都可以在程序的任何地方访问.即全局变量. 而在node中全局对象是global,所有全局变量都是global对象的属性,包括其本身 ...

  5. Node.js核心模块-http

    通过node中的http模块可以创建编写服务器 引入 const http = require('http') http举例使用: const http = require('http') //引入 ...

  6. Node.js核心模块-net

    net.Socket 类 socket.remotePort 访问服务器的远程端口 const http = require('http'); const server = http.createSe ...

  7. Node.js的模块载入方式与机制

    Node.js中模块可以通过文件路径或名字获取模块的引用.模块的引用会映射到一个js文件路径,除非它是一个Node内置模块.Node的内置模块公开了一些常用的API给开发者,并且它们在Node进程开始 ...

  8. 36.Node.js 工具模块--OS模块系统操作

    转自:http://www.runoob.com/nodejs/nodejs-module-system.html Node.js os 模块提供了一些基本的系统操作函数.我们可以通过以下方式引入该模 ...

  9. 37.Node.js工具模块---处理和转换文件路径的工具 Path模块

    转自:http://www.runoob.com/nodejs/nodejs-module-system.html Node.js path 模块提供了一些用于处理文件路径的小工具,我们可以通过以下方 ...

随机推荐

  1. 我叫小M,立志建立MySQL帝国。

    我是小M,我在卡拉巴拉星球. 我喜欢数据,我立志成为一个数据管理者. 所以我来 Y 公司应聘,听说他们的数据量挺大的. 面试过程还是挺简单的. 我用 007 这三个数字就轻易打败了一堆吹嘘 996 的 ...

  2. springboot的拦截器报错plicationFilterChain.java:193) ~[tomcat-embed-core-9.0.36.jar:9.0.36]

    解决方案: spingboot的拦截器"index.html"少"/",太粗心了

  3. 电梯也能无为而治——oo第二单元作业总结

    oo第二单元作业总结 一.设计策略与质量分析 第一次作业 设计策略 在第一次作业之前,我首先确定了生产者--消费者模式的大体架构,即由输入线程(可与主线程合并)充当生产者,电梯线程充当消费者,二者不直 ...

  4. 【笔记】《Redis设计与实现》chapter18 发布与订阅

    chapter18 发布与订阅 客户端订阅频道. 客户端向频道发送消息, 消息被传递至各个订阅者. 匹配模式 客户端订阅模式. 客户端向频道发送消息, 消息被传递给正在订阅匹配模式的订阅者. 另一个模 ...

  5. k8s cronjob

    k8s cronjob 只存在于v1beta1中 可以周期性 定时执行任务, 事例 [root@master01 ~]# kubectl apply -f mycronjob-busybox.yaml ...

  6. BB网络层测试

    网络层测试2020 问题 1 以下不属于网络层的协议是___A_______. A  DHCP  B ICMP  C IGMP  D ARP 10 分    问题 2 如果目的网络.目的主机都对,但是 ...

  7. JavaWeb请求与响应 Cookie&Session

    1.请求与响应 &Cookie&Session 1.1.请求与响应 HTTP协议 概念:英文全称:HyperText Transfer Protocol 中文全称:超文本传输协议   ...

  8. 【Java】String、StringBuilder和StringBuffer

    [String] 首先,从String类的定义入手,可以看到String类是由final修饰,即不可变的,一旦创建出来就不可修改,因此首先明确,字符串的拼接.截取等操作都会产生新的字符串对象. 观察以 ...

  9. postman传入cookie的三种方式

    1.直接在环境变量里面设置 2.在登录接口的tests,把返回值的cookie设置为全局变量 3.直接在cookie里面传入

  10. 10- JMeter5.1.1 工具快速入门

    什么是JMeter JMeter是Apache组织开发的开源软件,由Java语言实现. 主要用于软件系统性能测试,他最初被设计用于web测试,后来被扩展到其他领域. Jmeter特点 http://w ...