nodejs模块之fs&&stream

nodejs的文件系统fs模块,可以实现对文件、目录等的操作,stream模块实现对文件数据的断续读写操作

一、文件操作

fs.readFile(file[,options],callback)  异步读取数据,参数err,data

fs.readFileSync(file[,options])  同步读取数据,返回读取的数据

fs.writeFile(file, data[,options],callback)  异步写数据,参数err

fs.writeFileSync(file,data[,options])  同步写数据,返回undefined

fs.stat(path,callback)  返回一个stats对象到回调函数参数中, 通过该stats对象获取文件信息,参数err,stats

fs.statSync(path)  同步,返回一个stats对象

------------------------------------------------------------------

stats对象获取信息方法:

stats.isFile()   是否为文件
stats.isDirectory()   是否为目录(文件夹)
stats.isBlockDevice()
stats.isCharacterDevice()
stats.isSymbolicLink() (only valid with fs.lstat())
stats.isFIFO()
stats.isSocket()

-------------------------------------------------------------

在index.js同级目录下创建一个file.txt, 里面填写数据作为测试用,比如Hello World

1、fs.readFile

"use srict";

const fs = require(‘fs‘);

fs.readFile(‘./file.txt‘, ‘utf-8‘, function (err, data) {
    if (err) {
        console.log(err);
        return;
    }
    console.log(data);
});

2、fs.readFileSync

"use srict";

const fs = require(‘fs‘);

const data = fs.readFileSync(‘./file.txt‘, ‘utf-8‘);
console.log(data);

3、fs.writeFile

读取file.txt文件数据,然后写到data.txt文件中,如果data.txt不存在,会自动创建然后写入,如果存在会先删除data.txt中数据,然后写入覆盖。

"use srict";

const fs = require(‘fs‘);

fs.readFile(‘./file.txt‘, ‘utf-8‘, function (err, data) {
    if (err) {
        console.log(err);
        return;
    }
    fs.writeFile(‘./data.txt‘, data + ‘ from file.txt‘, ‘utf-8‘, function (err) {
        if (err) {
            console.log(err);
            return;
        }
        console.log(‘write success‘);
    })
});

4、fs.stat

"use srict";

const fs = require(‘fs‘);

fs.stat(‘./file.txt‘, (err, stats) => {
    if (err) {
        console.log(err);
        return;
    }else {
        if (stats.isFile()) {
            fs.readFile(fileName, ‘utf-8‘, (err, data) => {
                if (err) {
                    console.log(err);
                    return;
                }
                fs.writeFile(‘./swFile.txt‘, data + ‘from file.txt by stat‘, ‘utf-8‘, (err) => {
                    if (err) {
                        console.log(err);
                        return;
                    }
                    console.log(‘write success stat‘);
                })
            });
        } else {
            console.log(‘The file is dirtory‘);
        }
    }
});

二、文件夹操作

fs.mkdir(path[,mode],callback)  创建文件夹,参数mode指的是文件夹权限,参数err

fs.mkdirSync(path[,mode])  同步创建文件夹,返回undefined

fs.readdir(path[,options],callback)  读取文件夹,返回一个数组到回调参数,包含该文件夹所有子内容的名字string,不包括子孙内容,参数err, dir

fs.readdirSync(path[,options])  同步读取文件夹,返回读取的文件夹数组数据

"use srict";

const fs = require(‘fs‘);

fs.readdir(‘./fsDemo‘, function (err, dir) {
    if (err) {
        console.log(err);
        return;
    }
    console.log(dir); // [‘demo01‘, ‘demo02‘]
});

四、流操作(stream模块)

fs.createReadStream(path[,options])  创建一个读流操作对象,返回一个readable对象

-------------------------------------------------------

readable对象支持的事件:

data:当有数据读取的时候,返回读取的数据到回调函数参数中

readable:当有数据可读取的时候触发,但不会读取数据,仅仅做判断用

end:当数据全部读取完毕的时候触发

readable对象支持的方法:

rs.pause()  暂停读取数据

rs.resume()  打开读取流,恢复读取数据

rs.read()  读取当前剩余数据并返回,没有则返回null

options 是一个对象或者字符串,各个默认值为

{
  flags: ‘r‘,
  encoding: null,
  fd: null,
  mode: 0o666,
  autoClose: true
}

---------------------------------------------------

fs.createWriteStream(path[,options])  写流操作,返回一个writable对象

---------------------------------------------------

writable支持的事件:

finish:当end方法被调用,且所有数据都写入完毕时触发

pipe:当对象通过pipe写入数据时

writable对象支持的方法:

ws.write(chunk[,encoding][,callback])  写数据,chunk是要写入的数据(string|buffer) callback:写入后回调函数

ws.end()  关闭写入流

----------------------------------------------------

pipe方法:

rs.pipe(ws) 从左向右看,创建一个管道,将rs读取的数据通过管道流入到ws写入

-----------------------------------------------------------------------------------------------------------

fs.createReadStream

"use srict";

const fs = require(‘fs‘);

const rs = fs.createReadStream(‘./file.txt‘, ‘utf-8‘);
// 当读取数据时触发,将读取的数据打印
rs.on(‘data‘, function (data) {
    console.log(data);
});
// 当有数据可读是,将剩余数据全部打印出来
rs.on(‘readable‘, function() {
    console.log(rs.read())
});
// 当读取结束时,打印read finished
rs.on(‘end‘, function () {
    console.log(‘read finished‘);
});

fs.createWriteStream

"use strict";

const fs = require(‘fs‘);

const rs = fs.createReadStream(‘./file.txt‘, ‘utf-8‘);
const ws = fs.createWriteStream(‘./data.txt‘, {
    flags: ‘w‘, // a 追加,w 删除后再写,默认为w

});
// 当读取数据时触发,将读取的数据写入
rs.on(‘data‘, function (data) {
    ws.write(data);
});
// 当读取数据结束时,关闭写入流,打印write end
rs.on(‘end‘, function (data) {
    ws.end();
    console.log(‘write end‘);
});

// 其实可以通过pipe方法,一句代码实现上边的功能,如下
// rs.pipe(ws);

-------------------------------------------------------------------------------------end

时间: 2024-08-07 21:18:04

nodejs模块之fs&&stream的相关文章

nodeJs文件系统(fs)与流(stream)

文件系统(File System): 在Node中,文件系统的交互是非常重要的,服务器的本质就是将本地的文件发送给客户端, Node通过fs模块来和文件系统进行交互,该模块提供了一些标准的文件访问API类打开.读取.写入文件.以及与其交互. 要是用fs模块,首先要从核心模块中加载: 使用 const fs= require('fs') ; 来引入 fs使用特点: fs模块中的所有操作都有两种形式可供选择同步和异步, 同步文件系统会阻塞程序的执行,也就是除非操作完毕,否则不会向下执行代码. 异步文

nodejs学习笔记一( sublime、atom开发环境,http模块,fs模块的初识)

http服务 let server = http.createServer(function(req,res){ }); 监听: server.listen(8080); request       请求 response     相应 编辑器配置相应的环境 sublime: 依次打开  Tools --> Build System --> new Build System 中文:工具 --> 编译系统 --> 新建编译系统 输入以下代码,保存配置文件,然后 使用快捷键 Ctrl

NodeJS模块、包、NPM

1.NodeJS模块        每一个Nodejs都是一个NodeJS模块,包括JS文件,JSON文本文件,二进制模块文件. a.模块的应用               新建一个文件mytest.js,输入如下代码: function hello() { console.log('Hello'); } function world() { console.log('World'); } 这就是一个NodeJS模块,但是怎么在其他模块中引入呢?我们需要为模块提供对外的接口,这就用到module

利用nodejs模块缓存机制创建“全局变量”

在<深入浅出nodejs>有这样一段(有部分增减): 1.nodejs引入模块分四个步骤 路径分析 文件定位 编译执行 加入内存 2.核心模块部分在node源代码的编译过程中就编译成了二级制文件,在node启动时就直接加载如内存,所以这部分模块引入时,前三步省略,直接加入. 3.nodejs的模块加载和浏览器js加载一样都有缓存机制,不同的是,浏览器仅仅缓存文件,而nodejs缓存的是编译和执行后的对象(缓存内存). 基于以上三点:我们可以编写一个模块,用来记录长期存在的变量.例如:我可以编写

es6模块 nodejs模块和 typescript模块

es6模块 import和export nodejs模块 require和module.exports typescript模块 module和export 原文地址:https://www.cnblogs.com/mttcug/p/8120274.html

nodejs模块pg操作postgres数据库

postgres数据库安装:windows安装解压版postgresql 1.使用nodejs模块pg操作postgres数据库 const pg = require('pg') // 数据库配置 var config = { user: "wenbin.ouyang", host: 'localhost', database: "test", password: "", port: 5432, // 扩展属性 max: 20, // 连接池最大

nodejs模块fs——文件操作api

// fs模块常用api // 读取文件 .写入文件 .追加文件. 拷贝文件 .删除文件 // 读取文件 // fs.readFile(path[, options], callback) // fs.readFileSync(path[, options]) const fs = require('fs') // 异步读取 fs.readFile('./test.json', (error, data) => { if (error) return var data = data.toStri

NodeJS模块系统

为了让NodeJS的文件可以相互调用,NodeJS提供了一个简单的模块系统. 模块是NodeJS应用程序的基本组成部分,文件和模块是一一对应的,换言之,一个NodeJS文件就是一个模块,这个文件可能是javascript代码,JSON或者编译过的C/C++扩展. 创建模块 // hello.js exports.world = function(){ console.log('hello world'); } // main.js var hello = require('./hello');

nodejs 模块以及加载机制,主要讨论找不到模块的问题

最主要的一个思想,加载模块无非就是找到模块在哪,只要清楚了模块的位置以及模块加载的逻辑那么找不到模块的问题就迎刃而解了.本文只是综合了自己所学的知识点进行总结,难免出现理解错误的地方,请见谅. nodejs的模块分类 1.原生模块:http  fs path等,这些模块都在源码包的lib目录下面,nodejs安装好之后是找不到这些模块的,都作为node.exe的一部分了,require这些模块永远没问题的,如果哪天出现问题了,直接重启电脑或者重装node.有什么疑问可以通过下载源码对这些原生模块