# node文件系统基本操作

nodejs提供javascript的运行环境,其中提供的一个很重要的能力就是利用js操作文件系统, 作为前端开发工程师,平时和浏览器打交道最多,很少接触文件的操作,所以今天就着重写一下nodejs 操作文件系统。

# 文件的基本操作

# 1.文件内容的读取

const fs = require('fs');
let filePath = 'D:/workFile/root/readme.txt';
fs.readFile(filePath, 'utf8', (err, data) => {
  // data中存放着文件内容
  if (!err) {
    console.log(data);
  } else {
    console.log(err);
  }
});
1
2
3
4
5
6
7
8
9
10

# 2.写文件

说明

🔰

  • 当调用writeFile时,会清空原文件内容,写入新的文件内容,如果需要在原文件后追加内容,则使用appendFile
  • 当写入的文件不存在时,会创建该文件,并写入内容;
let filePath = 'D:\\workFile\\root\\readme.txt';
let writeContent = '测试nodejs => koa 文件写入';
fs.writeFile(filePath, writeContent, (err) => {
  // err 文件写入失败时
  // 此处会将readme.txt里的原内容删除,并添加writeContent的内容
});
fs.appendFile(filePath, writeContent, (err) => {
  // err 文件写入失败时
  // 此处会在readme.txt里的原内容基础上追加writeContent的内容
});
1
2
3
4
5
6
7
8
9
10

# 3.创建文件

创建文件有多中方式,可以使用fs.openfs.writeFilefs.appendFilefs.readFile......, 在fs.writeFile函数中,writeFile接受四个参数writeFile(filepath, writeContent, options, callback) 其中options中有flag选项,我们可以设置该选项为writeFile函数赋予不同的表现形式。 因为writeFileflag默认值为w,根据下面的表格 我们可以看到,当写入的文件不存在时,w参数决定了函数会创建并写入数据,这里涉及文件的系统标志判定,根据nodejs官网上列出的标志和作用,下面的标志和作用会在 文件不存在时创建文件

标志 作用
a 打开文件用于追加。 如果文件不存在,则创建该文件。
a+ 打开文件用于读取和追加。 如果文件不存在,则创建该文件。
as 打开文件用于追加(在同步模式中)。 如果文件不存在,则创建该文件。
w 打开文件用于写入。 如果文件不存在则创建文件,如果文件存在则截断文件。
w+ 打开文件用于读取和追加。 如果文件不存在,则创建该文件。
a+ 打开文件用于读取和写入。 如果文件不存在则创建文件,如果文件存在则截断文件。

# 4.文件的删除

let deleteFile = 'D:/cook/see/nodejs/name.txt';
fs.unlink(deleteFile, err => {
  
})
1
2
3
4

# 5.拷贝文件

说明

  • 源文件和目标文件必须是文件,不可以是目录
let filePath = 'D:\\workFile\\root\\readme231.txt';
let dest = 'D:/cook/see/nodejs/111.txt';
fsp.copyFile(filePath, dest, callback);
1
2
3

# 6.文件的读取流和写入流

let filePath = 'D:\\workFile\\root\\readme231.txt';
let writePath = 'D:\\workFile\\root\\readme1.txt';
// 创建可读流
let rs = fs.createReadStream(filePath);
// 创建可写流
let ws = fs.createWriteStream(writePath);
// 注册监听finish事件
ws.on('finish', () => {
  console.log('完成了!');
});
// 开始从可读流流向可写流
rs.pipe(ws);
1
2
3
4
5
6
7
8
9
10
11
12

# 6.文件的压缩和解压

利用Nodejszlib模块实现文件的压缩和解压功能。压缩和解压都是围绕 Node.jsStreams API 构建的。 让可读流流向可写流的过程中在经过一次zip压缩(zlib.createGzip())或解压(zlib.createGunzip()),即可实现 文件的压缩和解压。









 

 







 








const fs = require('fs');
const zlib = require('zlib');
const { pipeline } = require('stream');

let filePath = 'D:\\workFile\\root\\readme.txt';
let writePath = 'D:\\workFile\\root\\readme.zip';
let rs = fs.createReadStream(filePath);
let ws = fs.createWriteStream(writePath);
let gzip = zlib.createGzip();
// 压缩文件
pipeline(rs, gzip, ws, (err) => {
  if (!err) {
    console.log('成功');
  }
});
// 解压文件
pipeline(
  fs.createReadStream('D:\\workFile\\root\\readme.zip'),
  zlib.createGunzip(),
  fs.createWriteStream('D:\\workFile\\root\\readme98.txt'),
  (err) => {
    if (!err) {
      console.log('成功');
    }
  }
);
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
26

# 目录的基本操作

# 1.目录的创建

fs.mkdir(path, options, callback)函数接受三个参数,第一个是要创建的目录路径,第二个是配置参数,第三个是 回调函数,第二个参数有两个选项moderecursive,将recursive设置为true,创建函数会 创建path目录中所有的为创建的目录。

// 创建 `/目录1/目录2/目录3`,不管 `/目录1` 和 `/目录1/目录2` 是否存在。
fs.mkdir('/目录1/目录2/目录3', { recursive: true }, (err) => {
  if (err) throw err;
});
1
2
3
4

# 2.目录的删除

说明

🔰

  • fs.rmdir(path, callback)函数在v12.10.0版本之后支持传入option配置,可以在其中配置 recursive:true,来递归的删除目录(针对目录下存在目录的情况)
  • fs.rmdir(path, callback)注意递归删除只是实验性质的,建议还是只删除单一目录,目录下不存在新的目录的情况。
 fs.rmdir('D:/cook/see',  err => {});
1

# 3.读取目录内文件

fs.readdir('D:\\workFile\\root', (err, files) => {
  // files => Array 中存放着目录下的全部文件名称
});
1
2
3
上次更新: 5/20/2020, 6:45:37 PM