nodeJs fs模块

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

// 异步读取文件    参数(要读的文件的路径、utf8格式、回调(data:读到的内容)) 
fs.readFile('./a.txt', 'utf8', (err, data) => {
    console.log(data);
});

// 同步读取文件    
var data = fs.readFileSync('./a.txt', 'utf8');
console.log(data);


// 异步写文件   参数(要写的文件路径、写的内容、回调 )
fs.writeFile('a.txt', '我是异步啊!',  err => {
  
})
// 同步写文件
var data = 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官网还有一种简单的文件拷贝(内容是一次性写入) 如下:

file1: 被拷贝文件路径     file2:拷贝的文件路径
fs.createReadStream(file1).pipe(fs.createWriteStream(file2));
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • //公共引用 varfs =require('fs'), path =require('path'); 1、读取文...
    才気莮孒阅读 838评论 0 1
  • https://nodejs.org/api/documentation.html 工具模块 Assert 测试 ...
    KeKeMars阅读 6,368评论 0 6
  • fs模块包含所有文件查询和处理的相关函数,用这些函数,可以查询文件信息,读写和关闭文件。 使用fs.stath函数...
    含泪若笑阅读 405评论 0 0
  • 文件系统模块是一个封装了标准的 POSIX 文件 I/O 操作的集合。通过require('fs')使用这个模块。...
    保川阅读 799评论 0 0
  • 实验简介 fs模块用于对系统文件及目录进行读写操作参考链接:http://nodejs.org/api/fs.ht...
    张金宇阅读 621评论 0 0