这节课我们会用 fs
文件模块来读写文件,Node.js 为我们提供了读写文件的能力。要使用这个能力我们需要引入其中的一个核心模块 fs
。
var fs = require('fs'); // 命名惯例一般是变量名跟模块名一致
文件模块能为我们做的事情很多,这节课我们聚焦于读写文件。
读文件(同步方法)
- 首先我们需要有一个待读取内容的文件,创建一个文本文件
readMe.txt
- 然后执行读取方法,顾名思义,该方法是一个同步读取文件的方法,意思是位于下方的代码需要等待文件读取完成后才会执行,所以这是阻塞型方法,当然之后会提到异步方法
- 读取方法的参数为
文件路径
与文件编码
,读取的数据是二进制(0 和 1),字符编码决定了如何读取二进制数据为我们能力理解的内容
var fs = require('fs');
var content = fs.readFileSync('readMe.txt', 'utf8');
console.log('文件读取完才会显示这行');
写文件(同步方法)
- 我们会在读文件的基础上,将读取的内容写入到一个新的文件里。同样的,这是一个同步方法
- 第一个参数是写入文件的路径,第二个参数是写入的内容
var fs = require('fs');
var content = fs.readFileSync('readMe.txt', 'utf8');
fs.writeFileSync('writeMe.txt', content);
下面来看看异步读写文件的版本
读文件(异步方法)
去掉 readFileSync 的 Sync 就是异步方法。由于是异步方法,因此当读取操作完成的时候需要有一个回调方法,读取的内容不再需要赋值到变量里,而是在这个回调方法中返回,比起同步版本而言,更好的是它不会阻塞代码。
fs.readFile('readMe.txt', 'utf8', function(err, content){ // 第一个是错误对象,第二个是成功读取的所有内容
if(err){
throw err;
}
console.log(content);
});
console.log('这里的内容会优先与文件读取的内容显示');
写文件(异步方法)
我们需要读取文件内容后执行写文件的操作,因此需要在回调方法中进行写文件的操作
fs.readFile('readMe.txt', 'utf8', function(err, content){ // 第一个是错误对象,第二个是成功读取的所有内容
if(err){
throw err;
}
fs.writeFile('writeMe.txt', content, function(err){
console.log(err);
})
});
console.log('这里的内容会优先与文件读取的内容显示');
异步代码在多请求的情况下效率会很高,同步代码则需要等待每个请求处理完成,会造成延误感觉,因此大多数情况下会使用异步代码。
网友评论