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);
});
}); 

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

const fs = require('fs');

fs.open('./1.txt', 'w+', 0o666, function (err, fd) {
let data = Buffer.from('数据\n');
let task = [];
//我们往文件中循环写入数据
for (ix = 0; ix < 1000; ix++) {
task.push(function () {
return new Promise((resolve, reject) => {
fs.write(fd, data, 0, data.length, null, function (err, written, buffer) {
if (err) {
reject(err);
} else {
resolve(written);
}
});
});
});
} Promise.all(task.map(fn => fn())).then(value => {
console.log(value);
}, reason => {
console.log(reason);
}); //当们写完数据后,一般会强制刷新缓冲区,让数据写入到文件里,然后关闭文件。
//因为系统为了效率,我们写入的数据通常会放到一个缓冲区中,当缓冲区满了后,系统就一次把数据写到文件。
fs.fsync(fd, function (err) {
console.log(err);
//关闭文件
fs.close(fd, function (err) {
console.log(err);
})
});
});

七、创建目录

const fs = require('fs');

//创建目录,默认情况下不支持递归创建目录
fs.mkdir('./a', function (err) {
console.log(err);
}); //通过设置参数二中的recursive为true,则可以递归创建目录
fs.mkdir('./a/b/c', {'recursive': true}, function (err) {
console.log(err);
}); 

八、删除目录

const fs = require('fs');

//rmdir无法删除非空目录
fs.rmdir('./a', function (err) {
console.log(err);
});

九、测试文件或目录是否存在,是否可读,是否可写

const fs = require('fs');

let path = './a';

//判断是否存在
fs.access(path, fs.constants.F_OK, function (err) {
console.log(err ? '不存在' : '存在');
}); //判断是否可读
fs.access(path, fs.constants.R_OK, function (err) {
console.log(err ? '不可读' : '可读');
}); //判断是否可写
fs.access(path, fs.constants.W_OK, function (err) {
console.log(err ? '不可写' : '可写');
}); 

十、读取目录下的所有文件

const fs = require('fs');
const path = require('path'); //读取目录下所有文件
fs.readdir('./a', function (err, files) {
console.log(files);
}); //递归的读取一个目录所有文件
function readDir(dir) {
fs.stat(dir, function (err, stats) {
if (stats.isDirectory()) {
console.log(dir);
fs.readdir(dir, function (err, files) {
files.map(value => {
let cur = path.join(dir, value);
fs.stat(cur, function (err, stats) {
if (stats.isDirectory()) {
readDir(cur);
} else {
console.log(cur);
}
});
});
});
} else {
console.log(dir);
}
});
}
readDir('./node_modules');

十一、查看文件或目录的详细信息

const fs = require('fs');

//获取目录详细信息
fs.stat('./a', function (err, stats) {
console.log(stats);
}); //获取文件详细信息
fs.stat('./1.txt', function (err, stats) {
console.log(stats);
});

stats.size 表示文件大小。

stats.atime 表示文件中的数据最后访问时间。

stats.mtime 表示文件中的内容修改最后时间。

stats.ctime 表示文件权限,拥有者,所属组,链接数发生改变时的时间。

stats.birthtime 表示文件创建时间。

十二、重命名或移动文件

const fs = require('fs');

//重命名文件
fs.rename('./1.txt', './b.txt', function (err) {
console.log(err);
}); //移动文件
fs.rename('./2.txt', './a/b/c/2.txt', function (err) {
console.log(err);
});

十三、删除文件

const fs = require('fs');

//删除文件
fs.unlink('./3.txt', function (err) {
console.log(err);
});

十四、截取文件

const fs = require('fs');

//截取文件成3个字节
fs.truncate('./b.txt', 3, function (err) {
console.log(err);
});

十五、监视文件或目录的状态改变

const fs = require('fs');

//监视目录
fs.watchFile('./a', function (curr, prev) {
console.log(curr);
console.log(prev); if (curr.mtimeMs !== prev.mtimeMs) {
console.log('内容发生的改变');
}
});

  

node.js中fs文件系统模块的使用的更多相关文章

  1. Node.js:fs文件系统模块

    fs文件系统模块,这是一个非常重要的模块,对文件的操作都基于它.该模块的所有方法都有同步和异步两种方式,下面便介绍一下该模块的使用. 1.检测当前进程对文件的权限 使用fs.access(path[, ...

  2. 在Node.js中操作文件系统(一)

    在Node.js中操作文件系统 在Node.js中,使用fs模块来实现所有有关文件及目录的创建,写入及删除操作.在fs模块中,所有对文件及目录的操作都可以使用同步与异步这两种方法.比如在执行读文件操作 ...

  3. node.js中使用http模块创建服务器和客户端

    node.js中的 http 模块提供了创建服务器和客户端的方法,http 全称是超文本传输协议,基于 tcp 之上,属于应用层协议. 一.创建http服务器 const http = require ...

  4. node.js的fs核心模块读写文件操作 -----由浅入深

    node.js 里fs模块 常用的功能 实现文件的读写 目录的操作 - 同步和异步共存 ,有异步不用同步 - fs.readFile 都不能读取比运行内存大的文件,如果文件偏大也不会使用readFil ...

  5. node.js中path路径模块的使用

    path模块是node.js中处理路径的核心模块.可以很方便的处理关于文件路径的问题. join() 将多个参数值合并成一个路径 const path = require('path'); conso ...

  6. node.js中通过stream模块实现自定义流

    有些时候我们需要自定义一些流,来操作特殊对象,node.js中为我们提供了一些基本流类. 我们新创建的流类需要继承四个基本流类之一(stream.Writeable,stream.Readable,s ...

  7. Node.js 内置模块fs(文件系统)

    fs模块的三个常用方法 1.fs.readFile() -- 读文件 2.fs.writeFile() -- 写文件 3.fa.stat() -- 查看文件信息 fs模块不同于其它模块的地方是它有异步 ...

  8. node.js中使用zlib模块进行数据压缩和解压

    我们可以使用 zlib 模块来对数据进行压缩和解压处理,减小数据体积,加快传输速度. 一.通过创建转换流,对文件进行压缩和解压 const fs = require('fs'); const zlib ...

  9. 在node.js中使用mongose模块

    对象与文档相对应 创建项目目录,用root进入 # mkdir /home/test/part9/ 直接# npm install mongoose,报错如下 ../node_modules/nan/ ...

随机推荐

  1. js正则表达式讲的最好的

    https://www.cnblogs.com/chenmeng0818/p/6370819.html

  2. 深入Session2

    一.分布式环境Session的处理方法 分布式环境下要保持会话跟踪最简单的方式是只依靠客户端Cookie保存,不过大多数情况下还需要用到Session,一般的处理方式如下: 1.Session复制 每 ...

  3. MySQL通过分组计算百分比

    公司在做柯米克的分析报告,需要我这边把汽车之家柯米克论坛的评论数据和评论用户所在地的数据获取,通过爬虫的方式很快的解决了数据的问题,但是需要我提取下各省评论人数的比例,所以在数据库里面直接计算了相关的 ...

  4. Python完全新手教程

    转发:作者: taowen  来源: 博客园  发布时间: 2010-10-01 00:42  阅读: 1618 次  推荐: 0                  原文链接  [收藏] Lesson ...

  5. 【C++】vector内存机制和性能分析

    转自:https://blog.csdn.net/mfcing/article/details/8746256 一些好的公司校园招聘过程中(包括笔试.面试环节),经常会涉及到STL中vector的使用 ...

  6. <Numerical Analysis>(by Timothy Sauer) Notes

    2ed,  by Timothy Sauer DEFINITION 1.3A solution is correct within p decimal places if the error is l ...

  7. 斐讯自动下单抢购V1.3.4【自动验证码识别】

    20180530 更新 V1.3.41.增加有货下单:替代定时下单 20180519 更新 V1.3.31.增加订单满减优惠:支付宝每单立减5元2.修改商城域名及下单速度 功能介绍1.斐讯商城抢购专用 ...

  8. Reference.svcmap: Could not load file or assembly

    Reference.svcmap: Could not load file or assembly 在添加服务的时候出现如上错误, 把这个勾去掉就可以了.

  9. docker stats监控容器资源消耗

    在容器的使用过程中,如果能及时的掌握容器使用的系统资源,无论对开发还是运维工作都是非常有益的.幸运的是 docker 自己就提供了这样的命令:docker stats. 默认输出 docker sta ...

  10. Sqluldr2 libclntsh.so报错处理

    Sqluldr2 libclntsh.so报错处理 处理报错 [oracle@oracledg tmp]$ ./sqluldr2linux64.bin ./sqluldr2linux64.bin: e ...