node.js中fs文件系统模块的使用方法实例详解

node.js中为我们提供了fs文件系统模块,实现对文件或目录的创建,修改和删除等操作。

fs模块中,所有的方法分为同步和异步两种实现。

有 sync 后缀的方法为同步方法,没有 sync 后缀的方法为异步方法。

一、文件的整个读取

const fs = require('fs'); //参数一表示读取的文件 //参数二表示读取的配置,{encoding:'null', flag:'r'} //encoding 表示编码方式 //flag 表示文件系统标志 //如果没有指定参数二中的encoding,则data返回的是一个Buffer fs.readFile('./1.txt', function (err, data) { console.log(data); }); //如果指定了,则data返回的是解析后的字符串 fs.readFile('./1.txt', {'encoding': 'utf8', 'flag': 'r'}, function (err, data) { console.log(data); });

或同步读取:

const fs = require('fs'); let data = fs.readFileSync('./1.txt'); console.log(data); let data2 = fs.readFileSync('./1.txt', {'encoding': 'utf8'}); console.log(data2);

二、往文件写入数据

const fs = require('fs'); //参数一表示需要写入的文件 //参数二表示写入的数据 //参数三表示写入配置 {encoding:'utf8', mode:'0o666', flag:'w'} //encoding 表示文件编码 //mode 表示文件权限 //flag 表示表示文件系统标志 fs.writeFile('./1.txt', '数据', {'mode': 0o666, 'flag': 'w'}, function (err) { console.log(err); }); //注意如果文件已存在,默认会覆盖写入 fs.writeFile('./1.txt', '你好', function (err) { console.log(err); }); //如果想追加写入,将flag设置为'a'就可以了。 fs.writeFile('./1.txt', '你好', {'flag': 'a'}, function (err) { console.log(err); });

注意,writeFile() 默认会以覆盖的方式写入数据。

或者同步写入数据:

const fs = require('fs'); fs.writeFileSync('./1.txt', '数据');

关于 mode 文件权限的说明:

在linux中文件的权限会为3种,4-表示可读,2-表示可写,1-表示可执行。它们之间的相互组合形成不同权限。

对于文件,有三个权限分配,1:文件所有者,2:文件所属组,3:其他用户。

关于 flag 文件系统标志的说明:

r   表示 读取  
  表示 写入  
  表示 同步  
  表示 追加  
  表示 文件存在就报错  
  表示 增加相反操作  

r+ 与 w+ 区别,文件不存在时,r+ 不会创建文件,而 w+ 会创建。如果文件存在 r+ 不会清空文件,而 w+ 会清空文件。

三、往文件中追加数据

const fs = require('fs'); fs.appendFile('./1.txt', '数据', function (err) { console.log(err); }); fs.appendFileSync('./1.txt', '同步追加');

四、拷贝文件

const fs = require('fs'); //参数一表示源文件 //参数二表示目标文件 //参数三表示拷贝操作的修饰符,默认0 //参数四表示回调函数 fs.copyFile('./1.txt', './2.txt', function (err) { console.log(err); }); //同步拷贝文件 fs.copyFileSync('./1.txt', './3.txt');

五、打开文件,读取文件,写入文件

const fs = require('fs'); //参数一表示文件路径 //参数二表示文件系统标志 //参数三表示文件权限 //参数四表示回调函数,err表示错误,fd表示文件描述符,是一个整型 fs.open('./1.txt', 'r+', 0o666, function (err, fd) { //创建一个3字节的Buffer,用来接收数据 let rbuf = Buffer.alloc(3); //参数一表示文件描述符 //参数二表示接收数据的Buffer //参数三表示往Buffer中写入的偏移量 //参数四表示读取的字节数 //参数五表示从文件中读取的位置,如果为null,则是文件的当前位置读取 //参数六表示回调函数,err表示错误,bytesRead表示实际读取的字节,buffer表示接收数据的Buffer fs.read(fd, rbuf, 0, 3, 0, function (err, bytesRead, buffer) { console.log(rbuf.toString()); console.log(bytesRead); }); let wbuf = Buffer.from('中国'); //参数一表示文件描述符 //参数二表示写入数据的Buffer //参数三表示往Buffer中读取的偏移量 //参数四表示写入的字节数 //参数五表示从文件中写入的位置,如果不等于数字,则从文件的当前位置写入 //参数六表示回调函数,err表示错误,written表示实际写入的字节数,buffer表示写入数据的Buffer fs.write(fd, wbuf, 0, 3, fs.stat, function (err, written, buffer) { console.log(written); }); });

六、同步磁盘缓存,把缓冲区数据刷新到文件中。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/d55575c4c92cb101b1ff52adcb2190dd.html