一、概述
fs模块全称file system,是NodeJS中内置的文件模块,可以对计算机中的本地磁盘进行操作,其主要功能包括:文件读取、文件写入、文件删除、文件创建/移动/重命名、文件夹操作、查看资源状态等;
注:所有文件系统操作都具有同步、回调和基于 promise 的形式,并且可以使用 CommonJS 语法和 ES6 模块进行访问。
二、基本操作
1、文件写入
| 方法 | 操作 | 说明 |
|---|
| writeFile | 异步写入 | 若文件存在,替换指定的文件和内容,若该文件不存在,将创建一个包含指定内容的新文件 |
| writeFileSync | 同步写入 | 操作同上,但是没有callback回调参数 |
| appendFile | 异步追加写入 | 将指定的内容追加到文件中。若该文件不存在,则创建该文件 |
| appendFileSync | 同步追加写入 | 操作同上,无callback回调参数 |
| createWriteStream | 流式写入 | 流式写入可以减少打开关闭文件的次数,适用于大文件写入或者频繁写入的场景 |
var fs = require('fs');
fs.writeFile('./测试文本.txt', 'Hello content!', function (err) {
if (err) throw err;
console.log('保存成功!');
});
fs.appendFile('./测试文本.txt', 'Hello content!', function (err) {
if (err) throw err;
console.log('保存成功!');
});
let ws = fs.createWriteStream('./测试文本.txt');
ws.write('白日依山尽\r\n');
ws.write('黄河入海流\r\n');
ws.end;
2、文件读取
| 方法 | 操作 | 说明 |
|---|
| readFile | 异步读取 | 用于读取计算机上的文件 |
| readFileSync | 同步读取 | 同上,但无callback回调 |
| createReadStream | 流式读取 | 默认每次返回64kb的文件流 |
var http = require('http');
var fs = require('fs');
http.createServer(function (req, res) {
fs.readFile('demofile1.html', function(err, data) {
res.writeHead(200, {'Content-Type': 'text/html'});
res.write(data);
return res.end();
});
}).listen(8080);
fs.readFile('./座右铭.txt', 'utf-8' ,(err, data) => {
if(err) throw err;
console.log(data);
}
)
let rs = fs.createReadStream('./测试文件.txt')
rs.on('data', data => {
console.log(data)
console.log(data.length)
})
rs.on('end', () => {
console.log('读取完成')
})
3、文件删除
| 方法 | 操作 | 说明 |
|---|
| unlink(path, callback) | 异步删除文件 | path 指向符号链接,则删除该链接文件,但不影响链接所指向的文件或目录 |
| unlinkSync(path) | 同步删除文件 | 同上 |
const fs = require('fs')
fs.unlink('./测试文件.txt', err => {
if(err) throw err;
console.log('删除成功');
})
fs.unlinkSync('./测试文件.txt');
4、文件夹创建
| 方法 | 操作 | 说明 |
|---|
| mkdir/mkdirSync | 创建文件夹 | |
| readdir/readdirSync | 读取文件夹 | |
| rmdir/rmdirSync | 删除文件夹 | |
| mkdtemp | 创建临时文件夹 | |
| open | 打开文件夹 | |
const fs = require('fs');
fs.mkdir('./tmp/a/apple', { recursive: true }, (err) => {
if (err) throw err;
});
fs.mkdirSync('./x/y/z', {recursive: true});
fs.readir('./x/y/z', (err, data) => {
if(err) throw err;
console.log(data);
})
let data = fs.readdirSync('./论语');
console.log(data);
fs.rmdir('./x/y/z', err => {
if(err) throw err;
console.log('删除成功');
})
fs.rmdir('./1', {recursive: true}, err => {
if(err) {
console.log(err);
}
console.log('递归删除')
});
fs.rmdirSync('./x', {recursive: true})