资讯专栏INFORMATION COLUMN

nodejs模块——fs模块小记

nanfeiyan / 917人阅读

摘要:参数说明文件描述符,必须接收方法中的回调函数返回的第二个参数。引入模块打开文件读取文件打印出中存入的数据关闭文件运行结果如下五目录操作创建目录使用创建目录,是需要创建的目录,是目录的权限默认是,是回调函数。

一、同步和异步
使用require("fs")载入fs模块,模块中所有方法都有同步和异步两种形式。
异步方法中回调函数的第一个参数总是留给异常参数(exception),如果方法成功完成,该参数为null或undefined。
异步写法demo:有一个回调函数。

var fs = require("fs"); // 载入fs模块

fs.unlink("/tmp/shiyanlou", function(err) {
    if (err) {
        throw err;
    }
    console.log("成功删除了 /tmp/shiyanlou");
});

同步写法demo:

var fs = require("fs");

fs.unlinkSync("/tmp/shiyanlou"); // Sync 表示是同步方法
console.log("成功删除了 /tmp/shiyanlou");

同步方法执行完并返回结果后,才能执行后续的代码。而异步方法采用回调函数接收返回结果,可以立即执行后续代码。
二、readFile读取文件
fs.readFile(filename,[option],callback) 方法读取文件。

参数说明:

filename String 文件名

option Object

- encoding String |null default=null

- flag String default="r"

callback Function

demo
有一个文本文件text.txt内容如下

line one
line two

和text.txt相同目录中有一个readfile.js,内容如下
readFile的回调函数接收两个参数,err是读取文件出错时触发的错误对象,data是从文件读取的数据。

var fs = require("fs"); // 引入fs模块

fs.readFile("./test.txt", function(err, data) {
    // 读取文件失败/错误
    if (err) {
        throw err;
    }
    // 读取文件成功
    console.log(data);
});

$ node readfile.js运行结果

// 使用toString()
fs.readFile("./test.txt", function(err, data) {
    // 读取文件失败/错误
    if (err) {
        throw err;
    }
    // 读取文件成功
    console.log(data.toString());
});

设置utf-8编码写法:

// 设置编码格式
fs.readFile("./test.txt", "utf-8", function(err, data) {
    // 读取文件失败/错误
    if (err) {
        throw err;
    }
    // 读取文件成功
    console.log("utf-8: ", data.toString());
  //直接用console.log(data);也可以
});

readFile同步的写法就是没有回调函数:fs.readFileSync(filename,[options])。
三、WriteFile写入文件
使用fs.writeFile(filename,data,[options],callback)写入内容到文件。

参数说明:

filename String 文件名

data String|buffer

option Object

- encoding String |nulldefault="utf-8"

- mode Number default=438(aka 0666 in Octal)

- flag Stringdefault="w"

callback Function

demo

var fs = require("fs"); // 引入fs模块

// 写入文件内容(如果文件不存在会创建一个文件)
// 写入时会先清空文件
fs.writeFile("./test2.txt", "test test", function(err) {
    if (err) {
        throw err;
    }

    console.log("Saved.");

    // 写入成功后读取测试
    fs.readFile("./test2.txt", "utf-8", function(err, data) {
        if (err) {
            throw err;
        }
        console.log(data);
    });
});

因为默认flag="w"是写,会清空文件,想要追加,可以传递一个flag参数,如下。

var fs = require("fs"); // 引入fs模块

// 写入文件内容(如果文件不存在会创建一个文件)
// 传递了追加参数 { "flag": "a" }
fs.writeFile("./test2.txt", "test test", { "flag": "a" }, function(err) {
    if (err) {
        throw err;
    }

    console.log("Saved.");

    // 写入成功后读取测试
    fs.readFile("./test2.txt", "utf-8", function(err, data) {
        if (err) {
            throw err;
        }
        console.log(data);
    });
});

flag传值,r代表读取文件,w代表写文件,a代表追加。

四、使用fs.read和fs.write读写文件
fs.read和fs.write功能类似fs.readFile和fs.writeFile(),但提供更底层的操作,实际应用中多用fs.readFile和fs.writeFile。

使用fs.read和fs.write读写文件需要使用fs.open打开文件和fs.close关闭文件。
1、fs.read()
先介绍fs.open。
fs.open(path,flags,[mode],callback)方法用于打开文件,以便fs.read()读取。
参数说明:

path 文件路径

flags打开文件的方式

[mode] 是文件的权限(可行参数,默认值是0666)

callback 回调函数

flags值及说明如下:

r :读取文件,文件不存在时报错;
r+ :读取并写入文件,文件不存在时报错;
rs :以同步方式读取文件,文件不存在时报错;
rs+ :以同步方式读取并写入文件,文件不存在时报错;
w :写入文件,文件不存在则创建,存在则清空;
wx :和w一样,但是文件存在时会报错;
w+ :读取并写入文件,文件不存在则创建,存在则清空;
wx+ :和w+一样,但是文件存在时会报错;
a :以追加方式写入文件,文件不存在则创建;
ax :和a一样,但是文件存在时会报错;
a+ :读取并追加写入文件,文件不存在则创建;
ax+ :和a+一样,但是文件存在时会报错。

fs.close(fd,[callback])
用于关闭文件,fd是所打开文件的文件描述符。
fs.read(fd,buffer,offset,length,position,callback)接收6个参数。
参数说明:

fd 文件描述符,必须接收fs.open()方法中的回调函数返回的第二个参数。

buffer 是存放读取到的数据的Buffer对象。

offset 指定 向buffer中存放数据的起始位置。

length 指定 读取文件中数据的字节数。

position 指定 在文件中读取文件内容的起始位置。

callback 回调函数,参数如下

- err 用于抛出异常

- bytesRead 从文件中读取内容的实际字节数。

- buffer 被读取的缓存区对象。

demo: read.js内容如下

var fs = require("fs"); // 引入fs模块

// 打开文件
fs.open("./testread.txt", "r", function(err, fd) {
    if (err) {
        throw err;
    }
    console.log("open file success.");
    var buffer = new Buffer(255);
    // 读取文件
    fs.read(fd, buffer, 0, 10, 0, function(err, bytesRead, buffer) {
        if (err) {
            throw err;
        }
        // 打印出buffer中存入的数据
        console.log(bytesRead, buffer.slice(0, bytesRead).toString());

        // 关闭文件
        fs.close(fd);
    });
});

运行结果

2、fs.write()
fs.read(fd,buffer,offset,length[,position],callback(err,bytesWritten,buffer))接收6个参数。
参数说明:

fd 文件描述符,必须接收fs.open()方法中的回调函数返回的第二个参数。

buffer 是存放 将被写入的数据,buffer尺寸的大小设置最好是8的倍数,效率较高。

offset buffer写入的偏移量。

length (integer)指定 写入文件中数据的字节数。

position (integer) 指定 在写入文件内容的起始位置。

callback 回调函数,参数如下

- err 用于抛出异常

- bytesWritten从文件中读取内容的实际字节数。

- buffer 被读取的缓存区对象。

var fs = require("fs"); // 引入fs模块

// 打开文件
fs.open("./testwrite.txt", `w`, function(err, fd) {
    if (err) {
        throw err;
    }
    console.log("open file success.");
    var buffer = new Buffer("shiyanlou");
    // 读取文件
    fs.write(fd, buffer, 0, 6, 0, function(err, bytesWritten, buffer) {
        if (err) {
            throw err;
        }

        console.log("write success.");
        // 打印出buffer中存入的数据
        console.log(bytesWritten, buffer.slice(0, bytesWritten).toString());

        // 关闭文件
        fs.close(fd);
    });
});

运行结果如下:

五、目录操作

1、创建目录
使用fs.mkdir(path,[mode],callback)创建目录,path是需要创建的目录,[mode]是目录的权限(默认是0777),callback是回调函数。
demo:mkdir.js内容如下

var fs = require("fs"); // 引入fs模块

// 创建 newdir 目录
fs.mkdir("./newdir", function(err) {
    if (err) {
        throw err;
    }
    console.log("make dir success.");
});

删除目录可以用fs.rmdir(path,callback);但是只能删除空目录。

2、读取目录

使用fs.readdir(path,callback)读取文件目录。
demo:readdir.js内容如下

var fs = require("fs"); // 引入fs模块

fs.readdir("./newdir", function(err, files) {
    if (err) {
        throw err;
    }
    // files是一个数组
    // 每个元素是此目录下的文件或文件夹的名称
    console.log(files);
});

结果输出该目录有哪些目录和文件。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/90769.html

相关文章

  • nodejs之express小记

    摘要:如果说用一句话来概括那就是它开启了服务器端语言。系列的文章并不会从一开始长篇概论的讲的历史,安装,以及其他很琐碎的事情。只会专门介绍关于或者准确来讲是关于的敏捷开发。性能不对已有的特性进行二次抽象,我们只是在它之上扩展了应用所需的基本功能。 如果说用一句话来概括Node那就是:它开启了JavaScript服务器端语言。 Node系列的文章并不会从一开始长篇概论的讲Node的历史,安装,...

    awokezhou 评论0 收藏0
  • nodejs之process进程小记

    摘要:因为进程退出之后将不再执行事件循环,所有只有那些没有回调函数的代码才会被执行。此外,创建的回调函数具有隔离性,他们之间不会相互影响。我们来看的一个简单例子,他创建了一个子进程,第一个参数是一个命令,第二个参数是回调函数,处理返回结果。 虽然node对操作系统做了很多抽象的工作,但是你还是可以直接和他交互,比如和系统中已经存在的进程进行交互,创建工作子进程。node是一个用于事件循环的线...

    Binguner 评论0 收藏0
  • Node事件机制小记

    摘要:事件的监听与事件的触发事件一事件机制的实现中大部分的模块,都继承自模块。从另一个角度来看,事件侦听器模式也是一种事件钩子的机制,利用事件钩子导出内部数据或状态给外部调用者。的核心就是事件发射与事件监听器功能的封装。 nodejs事件的监听与事件的触发 nodejs事件(Events)showImg(https://segmentfault.com/img/bV0Sqi?w=692&h=...

    airborne007 评论0 收藏0
  • 初学NodeJS(三)

    摘要:中的模块在中有模块的概念,类似于语言中的头文件,都是函数库。灵活运用模块可以非常便捷的操作后端操作前端。最好在运行文件的同个文件夹下下载方便使用,也可以在上级文件夹下载全局调用。他可以为文档增删改查。 nodeJS中的模块 在nodeJS中有模块的概念,类似于C语言中的头文件,都是函数库。灵活运用模块可以非常便捷的操作后端操作前端。而在nodeJS中引入模块要使用require();这...

    宠来也 评论0 收藏0
  • nodeJs文件系统(fs)与流(stream)

    摘要:异步文件系统不会阻塞程序的执行,而是在操作完成时,通过回调函数将结果返回。 文件系统(File System): 在Node中,文件系统的交互是非常重要的,服务器的本质就是将本地的文件发送给客户端, Node通过fs模块来和文件系统进行交互,该模块提供了一些标准的文件访问API类打开、读取、写入文件、以及与其交互。 要是用fs模块,首先要从核心模块中加载; 使用 const fs= ...

    0x584a 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<