## fs 基本模块
学习首先我们需要知道 fs 基本模块是做什么的,其中有哪些 API 给我们使用,这些 API 的作用是什么。这三点是我们需要掌握的。提升需要找到这些 API 的原理,运用的场景与不同之处,我们先进行基础的学习。
# fs 基本模块的作用
在了解 fs 基本模块的基本作用的时候,我们需要了解到 JavaScript 是一个单线程的模型,不能同时进行多步操作。这里就存在了 异步、同步的差异了。
fs 基本模块就是与电脑的存储部分进行读写操作的一个模块,我们通过它来访问电脑的数据和存储我们需要的数据。下面简述一些基本的 API。
# 异步读取文件
- 何为异步
异步就是某些访问需要等待一些时间,但是此时的 CPU 又是空闲的,所以在这段时间内将 CPU 的资源交给其他任务。可以更加的高效。
1. 一般情况下 readFile 函数接收的参数为 路径 编码方式 回调函数(错误, 数据)
'use strict'
const fs = require('fs');
fs.readFile('README.md', 'utf-8', function (err, data) {
if (err) {
console.log(err);
} else {
console.log(data);
}
})
2. 若没有设置编码方式,会默认转化为 Buffer 数组,(十六进制)
// 为了构造一种访问时间过程的现象我们采用 setTimeout
setTimeout(() => {
fs.readFile('README.md', function (err, data) {
if (err) {
console.log(err);
} else {
console.log(data); // 十六进制 Buffer 数组
}
})
}, 1000);
console.log('数据正在加载中');
# 同步读取文件
- 何为同步
同步时指访问获取数据这个过程都需要占用 CPU 即使 CPU 空闲。
和异步相比, 方法后面加上了 Sync ,同时不需要回调函数。
let data = fs.readFileSync('README.md', 'utf-8');
console.log(data); // 捕获错误,通过 try catch
# 异步与同步写文件
异步和同步写文件和读文件基本上一致,仅仅是 API 上有着细微的差别。
1. writeFile(uri, data, fucntion(err));
2. writeFile(uri, data);
let data = 'Hello, Node.js!';
// 异步
fs.writeFile('output.txt', data, function (err) {
if (err) {
console.log(err);
} else {
console.log('ok');
}
})
// 同步
fs.writeFileSync('output.txt', data);
# 查看文件的信息
stat 和 statSync ,可以查看这个地址的基本信息。
fs.stat('output.txt', function (err, stat) {
if (err) {
console.log(err);
} else {
// 是否是文件
console.log('isFile: ' + stat.isFile());
// 是否是目录
console.log('isDirectory: ' + stat.isDirectory());
if (stat.isFile()) {
// 文件大小:
console.log('size: ' + stat.size);
// 创建时间, Date对象:
console.log('birth time: ' + stat.birthtime);
// 修改时间, Date对象:
console.log('modified time: ' + stat.mtime);
}
}
})
let stat = fs.statSync('output.txt');
// 是否是文件
console.log('isFile: ' + stat.isFile());
// 是否是目录
console.log('isDirectory: ' + stat.isDirectory());
if (stat.isFile()) {
// 文件大小:
console.log('size: ' + stat.size);
// 创建时间, Date对象:
console.log('birth time: ' + stat.birthtime);
// 修改时间, Date对象:
console.log('modified time: ' + stat.mtime);
}
# 在文件中追加内容
appendFile 和 appendFileSync,这两种方法可以在文本内追加内容。文本中的信息不会被覆盖,但是也不会去重。
fs.appendFile(path, JSON.stringify(list), (err) => {
if (!err) {
console.log('list save');
}
else {
console.log(err);
}
})
参考资料
https://www.liaoxuefeng.com/wiki/1022910821149312/1023025732384672