创建和删除目录
异步创建删除目录
var fs = require("fs"); fs.mkdir("stuff", function() { fs.readFile("readMe.txt", "utf8", function(err, data) { fs.writeFile("./stuff/writeMe.txt", data, function() { console.log("copy successfully"); }) }) }); // fs.unlink("writeMe.txt", function() { // console.log("delete writeMe.txt file"); // })删除文件
递归删除非空文件夹
function delDir(path){ let files = []; if(fs.existsSync(path)){ files = fs.readdirSync(path); files.forEach((file, index) => { let curPath = path + "/" + file; if(fs.statSync(curPath).isDirectory()){ delDir(curPath); //递归删除文件夹 } else { fs.unlinkSync(curPath); //删除文件 } }); fs.rmdirSync(path); } } module.exports = delDir;流和管道
举例:在命令行中
ls命令:查看当前目录下的文件和目录
grep:筛选,例如是否包含"app"这个关键字
ls输出一个流(输出一个信息),这个流作为了grep命令的输入
文档:http://nodejs.cn/api/stream.h...
例如:HTTP请求是输入流,响应是输出流.
流的应用:
处理数据,最典型的就是http服务的时候.请求和响应就是流的一种体现,再比如对数据进行的处理,例如webpack,gulp也大量运用了流这个技术,或者对文件进行打包压缩
提高读写性能,与文件系统的读写命令有所区别,文件系统的读写文件命令是一次性把文件里的内容放到内存当中,如果文件很大,用这种命令就不太合适,要用流来处理,流会把内容放到buffer(缓存)中,一边放一边处理,这样的话性能就会很高
//把读取的文件放入一个流中 var fs = require("fs") var myReadStream = fs.createReadStream(__dirname + "/readMe.txt") //流是一个事件的实例,所以可以放置监听事件(流可以是可读的、可写的、或者可读可写的。 所有的流都是 EventEmitter 的实例。) myReadStream.on("data",function(chunk) {//chunk是块的意思 console.log("new chunk received") console.log(chunk) })
readMe.txt文件有5000行的字符,把文件分成一个个buffer,分段处理
在参数里加utf-8,会发现,把那段字符打印出来.
on是在接收数据的时候的监听函数,end代表在接受数据完成之后的数据
var fs = require("fs") var myReadStream = fs.createReadStream(__dirname + "/readMe.txt") myReadStream.setEncoding("utf8")//编码也可以这样写 var data = "" myReadStream.on("data",function(chunk) { data+=chunk }) myReadStream.on("end",function () { console.log(data) })
以上就是把一个readMe.txt当做一个流来处理.
如何写一个流新建一个写入流.
写入的时候直接使用方法write,参数为数据片段
把readMe.txt里面的内容写到writeMe2.txt里面
var fs = require("fs") var myReadStream = fs.createReadStream(__dirname + "/readMe.txt") var myWriteStream = fs.createWriteStream(__dirname+"/writeMe2.txt")//新建一个写入流. myReadStream.setEncoding("utf8") var data = "" myReadStream.on("data",function(chunk) { myWriteStream.write(chunk)//写入的时候直接使用方法write,参数为数据片段 }) myReadStream.on("end",function () { // console.log(data) })
或者:
把"hello world"写入""writeMe2.txt" 文件
var myWriteStream = fs.createWriteStream(__dirname+"/writeMe2.txt") var writeData = "hello world" myWriteStream.write(writeData) myWriteStream.end() myWriteStream.on("finish",function () { console.log("finish") })使用管道更方便得实现流的操作
实现复制内容的操作
var myReadStream = fs.createReadStream(__dirname + "/readMe.txt") var myWriteStream = fs.createWriteStream(__dirname+"/writeMe2.txt") myReadStream.pipe(myWriteStream)
把readMe的内容复制到writeMe2
管道运送流
加密,压缩的过程
// 压缩 var crypto = require("crypto"); var fs = require("fs"); var zlib = require("zlib"); var password = new Buffer(process.env.PASS || "password"); var encryptStream = crypto.createCipher("aes-256-cbc", password); var gzip = zlib.createGzip(); var readStream = fs.createReadStream(__dirname + "/readMe.txt"); // current file var writeStream = fs.createWriteStream(__dirname + "/out.gz"); readStream // reads current file .pipe(encryptStream) // encrypts .pipe(gzip) // compresses .pipe(writeStream) // writes to out file .on("finish", function() { // all done console.log("done"); }); // 解压 var crypto = require("crypto"); var fs = require("fs"); var zlib = require("zlib"); var password = new Buffer(process.env.PASS || "password"); var decryptStream = crypto.createDecipher("aes-256-cbc", password); var gzip = zlib.createGunzip(); var readStream = fs.createReadStream(__dirname + "/out.gz"); readStream // reads current file .pipe(gzip) // uncompresses .pipe(decryptStream) // decrypts .pipe(process.stdout) // writes to terminal .on("finish", function() { // finished console.log("done"); });
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/102484.html
摘要:当一个客户端的响应对象是一个可读流,那么在服务器端这就是一个可写流。的模块给我们提供了一个可以操作任何文件的可读流通过方法创建。创建一个可读流创建可读流,我们需要类创建一个可读流非常简单。可以通过修改可读流配置里面的方法实现。 Node.js的stream模块是有名的应用困难,更别说理解了。那现在可以告诉你,这些都不是问题了。 多年来,开发人员在那里创建了大量的软件包,其唯一目的就是使...
摘要:分类一按操作方式类结构字节流和字符流字节流以字节为单位,每次次读入或读出是位数据。该对象并不是流体系中的一员,其封装了字节流,同时还封装了一个缓冲区字符数组,通过内部的指针来操作字符数组中的数据。 分类一:按操作方式(类结构) 字节流和字符流: 字节流:以字节为单位,每次次读入或读出是8位数据。可以读任何类型数据。 字符流:以字符为单位,每次次读入或读出是16位数据。其只能读取字符类...
摘要:在包下主要包括输入输出两种流,每种输入输出流又可分为字节流和字符流两大类。输入输出是从程序运行所在的内存的角度而言的。的输入流主要由和作为基类,而输出流主要由和作为基类。 本章主要参考和摘自疯狂java讲义上面的(java编程思想的后面看过后有新的内容再补充进去吧)。 输入输出是所有程序都必需的部分————使用输入机制允许程序读取外部数据(包括磁盘、光盘等存储设备上的数据和用户输入的...
摘要:核心概念流流,简单来说就是建立在面向对象基础上的一种抽象的处理数据的工具。类型,设置输出路径以某个路径的某个组成部分为基础向后拼接。 一、gulp简介 1.gulp是什么? gulp是前端开发过程中一种基于流的代码构建工具,是自动化项目的构建利器;它不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成;使用它,不仅可以很愉快的编写代码,而且大大提高我们的工...
摘要:核心概念流流,简单来说就是建立在面向对象基础上的一种抽象的处理数据的工具。类型,设置输出路径以某个路径的某个组成部分为基础向后拼接。 一、gulp简介 1.gulp是什么? gulp是前端开发过程中一种基于流的代码构建工具,是自动化项目的构建利器;它不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成;使用它,不仅可以很愉快的编写代码,而且大大提高我们的工...
阅读 1494·2023-04-26 02:43
阅读 2744·2021-11-11 16:54
阅读 1310·2021-09-23 11:54
阅读 1094·2021-09-23 11:22
阅读 2281·2021-08-23 09:45
阅读 813·2019-08-30 15:54
阅读 3066·2019-08-30 15:53
阅读 3142·2019-08-30 15:53