NodeJS之fs模块

163 阅读3分钟

一、概述

  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)
})
//读取完毕后, 执行 end 回调
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})