nodejs fs模块

释放双眼,带上耳机,听听看~!

本文转载自 https://www.cnblogs.com/starof/p/5038300.html

nodejs模块——fs模块

fs模块用于对系统文件及目录进行读写操作。

一、同步和异步

使用require('fs')载入fs模块,模块中所有方法都有同步和异步两种形式。

异步方法中回调函数的第一个参数总是留给异常参数(exception),如果方法成功完成,该参数为null或undefined。

异步写法demo:有一个回调函数。


1
2
3
4
5
6
7
8
9
10
1
2var fs = require('fs'); // 载入fs模块
3
4fs.unlink('/tmp/shiyanlou', function(err) {   //unlink为删除文件方法
5    if (err) {
6        throw err;
7    }
8    console.log('成功删除了 /tmp/shiyanlou');
9});
10

同步写法demo:


1
2
3
4
5
6
1
2var fs = require('fs');
3
4fs.unlinkSync('/tmp/shiyanlou'); // Sync 表示是同步方法
5console.log('成功删除了 /tmp/shiyanlou');
6

同步方法执行完并返回结果后,才能执行后续的代码。而异步方法采用回调函数接收返回结果,可以立即执行后续代码。

二、readFile读取文件

fs.readFile(filename,[option],callback) 方法读取文件。

参数说明:

  • filename String 文件名

  • option Object

  • encoding String |null default=null

    • flag String default='r'
  • callback Function

demo

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


1
2
3
4
1
2line one
3line two
4

和text.txt相同目录中有一个readfile.js,内容如下

readFile的回调函数接收两个参数,err是读取文件出错时触发的错误对象,data是从文件读取的数据。


1
2
3
4
5
6
7
8
9
10
11
12
1
2var fs = require('fs'); // 引入fs模块
3
4fs.readFile('./test.txt', function(err, data) {
5    // 读取文件失败/错误
6    if (err) {
7        throw err;
8    }
9    // 读取文件成功
10    console.log(data);
11});
12

$ node readfile.js运行结果


1
2
3
1
2<Buffer 6c 69 6e 65 20 6f 6e 65 0a 6c 69 6e 65 20 74 77 6f 0a>
3

这是原始二进制数据在缓冲区中的内容。

要显示文件内容可以使用toString()或者设置输出编码。

toString()写法:


1
2
3
4
5
6
7
8
9
10
11
1
2// 使用toString()
3fs.readFile('./test.txt', function(err, data) {
4    // 读取文件失败/错误
5    if (err) {
6        throw err;
7    }
8    // 读取文件成功
9    console.log(data.toString());
10});
11

设置utf-8编码写法:


1
2
3
4
5
6
7
8
9
10
11
12
1
2// 设置编码格式
3fs.readFile('./test.txt', 'utf-8', function(err, data) {
4    // 读取文件失败/错误
5    if (err) {
6        throw err;
7    }
8    // 读取文件成功
9    console.log('utf-8: ', data.toString());
10  //直接用console.log(data);也可以
11});
12

readFile同步的写法就是没有回调函数:fs.readFileSync(filename,[options])。

三、WriteFile写入文件

使用fs.writeFile(filename,data,[options],callback)写入内容到文件。

参数说明:

  • filename String 文件名

  • data String|buffer

  • option Object

  • encoding String |null****default='utf-8'

    • mode** Number default=438(aka 0666 in Octal)**
    • flag String****default='w'
  • callback Function

demo


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
1
2var fs = require('fs'); // 引入fs模块
3
4// 写入文件内容(如果文件不存在会创建一个文件)
5// 写入时会先清空文件
6fs.writeFile('./test2.txt', 'test test', function(err) {
7    if (err) {
8        throw err;
9    }
10
11    console.log('Saved.');
12
13    // 写入成功后读取测试
14    fs.readFile('./test2.txt', 'utf-8', function(err, data) {
15        if (err) {
16            throw err;
17        }
18        console.log(data);
19    });
20});
21

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


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
1
2var fs = require('fs'); // 引入fs模块
3
4// 写入文件内容(如果文件不存在会创建一个文件)
5// 传递了追加参数 { 'flag': 'a' }
6fs.writeFile('./test2.txt', 'test test', { 'flag': 'a' }, function(err) {
7    if (err) {
8        throw err;
9    }
10
11    console.log('Saved.');
12
13    // 写入成功后读取测试
14    fs.readFile('./test2.txt', 'utf-8', function(err, data) {
15        if (err) {
16            throw err;
17        }
18        console.log(data);
19    });
20});
21

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值及说明如下


1
2
3
4
5
6
7
8
9
10
11
12
13
14
1
2r :读取文件,文件不存在时报错;
3r+ :读取并写入文件,文件不存在时报错;
4rs :以同步方式读取文件,文件不存在时报错;
5rs+ :以同步方式读取并写入文件,文件不存在时报错;
6w :写入文件,文件不存在则创建,存在则清空;
7wx :和w一样,但是文件存在时会报错;
8w+ :读取并写入文件,文件不存在则创建,存在则清空;
9wx+ :和w+一样,但是文件存在时会报错;
10a :以追加方式写入文件,文件不存在则创建;
11ax :和a一样,但是文件存在时会报错;
12a+ :读取并追加写入文件,文件不存在则创建;
13ax+ :和a+一样,但是文件存在时会报错。
14

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内容如下


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
1
2var fs = require('fs'); // 引入fs模块
3
4// 打开文件
5fs.open('./testread.txt', 'r', function(err, fd) {
6    if (err) {
7        throw err;
8    }
9    console.log('open file success.');
10    var buffer = new Buffer(255);
11    // 读取文件
12    fs.read(fd, buffer, 0, 10, 0, function(err, bytesRead, buffer) {
13        if (err) {
14            throw err;
15        }
16        // 打印出buffer中存入的数据
17        console.log(bytesRead, buffer.slice(0, bytesRead).toString());
18
19        // 关闭文件
20        fs.close(fd);
21    });
22});
23

运行结果

nodejs fs模块

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 被读取的缓存区对象。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
1
2var fs = require('fs'); // 引入fs模块
3
4// 打开文件
5fs.open('./testwrite.txt', `w`, function(err, fd) {
6    if (err) {
7        throw err;
8    }
9    console.log('open file success.');
10    var buffer = new Buffer('shiyanlou');
11    // 读取文件
12    fs.write(fd, buffer, 0, 6, 0, function(err, bytesWritten, buffer) {
13        if (err) {
14            throw err;
15        }
16
17        console.log('write success.');
18        // 打印出buffer中存入的数据
19        console.log(bytesWritten, buffer.slice(0, bytesWritten).toString());
20
21        // 关闭文件
22        fs.close(fd);
23    });
24});
25

运行结果如下:

 nodejs fs模块

五、目录操作

1、创建目录

使用fs.mkdir(path,[mode],callback)创建目录,path是需要创建的目录,[mode]是目录的权限(默认是0777),callback是回调函数。

demo:mkdir.js内容如下


1
2
3
4
5
6
7
8
9
10
11
1
2var fs = require('fs'); // 引入fs模块
3
4// 创建 newdir 目录
5fs.mkdir('./newdir', function(err) {
6    if (err) {
7        throw err;
8    }
9    console.log('make dir success.');
10});
11

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

2、读取目录

使用fs.readdir(path,callback)读取文件目录。

demo:readdir.js内容如下


1
2
3
4
5
6
7
8
9
10
11
12
1
2var fs = require('fs'); // 引入fs模块
3
4fs.readdir('./newdir', function(err, files) {
5    if (err) {
6        throw err;
7    }
8    // files是一个数组
9    // 每个元素是此目录下的文件或文件夹的名称
10    console.log(files);
11});
12

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

nodejs fs模块

给TA打赏
共{{data.count}}人
人已打赏
安全技术

常用加密解密算法【RSA、AES、DES、MD5】介绍和使用

2021-8-18 16:36:11

安全技术

C++ 高性能服务器网络框架设计细节

2022-1-11 12:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索