nodeJs|nodeJs fs模块

先引用fs内置模块 const fs = require('fs');

// 异步读取文件参数(要读的文件的路径、utf8格式、回调(data:读到的内容)) fs.readFile('./a.txt', 'utf8', (err, data) => { console.log(data); }); // 同步读取文件 var data = https://www.it610.com/article/fs.readFileSync('./a.txt', 'utf8'); console.log(data); // 异步写文件参数(要写的文件路径、写的内容、回调 ) fs.writeFile('a.txt', '我是异步啊!',err => {}) // 同步写文件 var data = https://www.it610.com/article/fs.writeFileSync('a.txt', '我是同步啊!'); console.log(data); // 异步追加一个文件参数(要追加的文件路径、写的内容、回调 ) fs.appendFile('a.txt', ',',err => { }); // 同步追加一个文件 fs.appendFileSync('a.txt', 'Im fine!'); // 异步复制文件内容参数(要复制的文件路径、被复制的文件路径、回调 ) fs.copyFile('./a.txt', './b.txt', err => { }); // 同步复制文件 fs.copyFileSync('./a.txt', './b.txt');

使用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.read(fd,buffer,offset,length,position,callback)接收6个参数。 参数说明:
  • fd 文件描述符,必须接收fs.open()方法中的回调函数返回的第二个参数。
  • buffer 是存放读取到的数据的Buffer对象。
  • offset 指定 向buffer中存放数据的起始位置。
  • length 指定 读取文件中数据的字节数。
  • position 指定 在文件中读取文件内容的起始位置。
  • callback 参数如下:
err 用于抛出异常
length 从文件中读取内容的实际字节数。
buffer 被读取的缓存区对象。

fs.open('a.txt', 'r+', (err, rfd) => { fs.open('b.txt', 'w+', (err, wfd) => { // 读到的buff流对象 (每次读4个汉字) let buf = Buffer.alloc(12); // 读取内容的位置(新读取的开始位置是上一次读取的结束位置) let rs = 0; // 写内容的位置(写的开始位置是上一次写的结束位置) let ws = 0; // 先自调用一次 (function next() { fs.read(rfd, buf, 0, 12, rs, (err, rlen, rbuf) => { rs += rlen; fs.write(wfd, buf, 0, 12, ws, (err, wlen, wbuf) => { ws += wlen; // 递归操作读写文件内容(rlen是读取的长度,为0时,说明读完了) rlen && next(); }) }) })(); }); });

上面这种方法的优点在于,文件的内容是一点一点的读取和写入的,可以控制读取的长度
【nodeJs|nodeJs fs模块】nodejs官网还有一种简单的文件拷贝(内容是一次性写入) 如下:
file1: 被拷贝文件路径file2:拷贝的文件路径 fs.createReadStream(file1).pipe(fs.createWriteStream(file2));

    推荐阅读