node.js基础语法整理--fs篇

77 阅读4分钟

Node.js 提供了许多内置模块,可以帮助开发人员更快地开发应用程序。

主要使用模块为fshttppathcryptoeventsstream

  • http 模块提供了创建 HTTP 服务器和客户端的功能。
  • path 模块提供了处理文件和目录路径的功能。
  • fs 模块提供了文件系统相关的功能,如读写文件。
  • os 模块提供了操作系统相关的功能。
  • crypto 模块提供了加密相关的功能。
  • events 模块提供了事件驱动编程相关的功能。
  • stream 模块提供了流相关的功能。

本文针对fs模块进行基础知识总结,其他模块会放在node.js基础知识大框图下,定时更新。

fs 文件系统 对磁盘进行读写操作 nodejs内置模版

常见操作:

    1. 文件写入
    1. 文件读取
    1. 文件移动与重命名
    1. 文件夹操作(创建、读取、删除)
    1. 相对路径、绝对路径
    1. __dirname

一、文件写入

1、writeFile / 异步写入

语法:fs.writeFile(file, data[, options], callback)

参数说明:

  • file 文件名
  • data 待写入的数据
  • options 选项设置 (可选)
  • callback 写入回调

例子

const fs = require('fs'); 
fs.writeFile('./like.txt', '撒拉嘿呦', err => { 
  //如果写入失败,则回调函数调用时,会传入错误对象,如写入成功,会传入 null
  if(err){ 
   console.log(err); 
     return;
  }
  console.log('写入成功');
});

2、writeFileSync / 同步写入

语法:fs.writeFileSync(file, data[, options])

参数与fs.writeFile 大体一致,只是没有 callback 参数

try{
fs.writeFileSync('./like.txt', '撒拉嘿呦'); 
} catch(e){
  console.log(e);
}

3、appendFile / appendFileSync 追加写入

语法:

fs.appendFile(file, data[, options], callback) ,

fs.appendFileSync(file, data[, options]),同上缺少callback

//例子
fs.appendFile('./like.txt','heiheihei', err => { 
  if(err) throw err; 
  console.log('追加成功') 
});
fs.appendFileSync('./like.txt','\r\n upupstudy');

4、createWriteStream / 流式写入

语法: fs.createWriteStream(path[, options])

参数说明: path 文件路径 options 选项配置( 可选 )

//例子
let ws = fs.createWriteStream('./忘记了叫什么的歌词.txt');
ws.write('爱是一道光\r\n'); 
ws.write('如此美妙\r\n'); 
ws.write('指引我们想要的未来\r\n'); 
ws.end();

二、文件读取

1、readFile/异步读取

语法: fs.readFile(path[, options], callback)

参数说明: path 文件路径 options 选项配置 callback 回调函数

//导入 fs 模块 const fs = require('fs');
fs.readFile('.like.txt', (err, data) => { 
  if(err)
    throw err; 
  console.log(data); 
});
fs.readFile('./like.txt', 'utf-8',(err, data) => { 
  if(err) 
    throw err;
  console.log(data); 
});

2、 readFileSync/同步读取

语法: fs.readFileSync(path[, options])

参数说明: path 文件路径 options 选项配置 返回值: string | Buffer

let data = fs.readFileSync('./like.txt'); 
let data2 = fs.readFileSync('./like.txt', 'utf-8');

3、createReadStream 流式读取

语法: fs.createReadStream(path[, options])

参数说明: path 文件路径 options 选项配置( 可选 )

//创建读取流对象 
let rs = fs.createReadStream('./like.txt');
//每次取出 64k 数据后执行一次 data 回调
rs.on('data', data => { 
  console.log(data); 
  console.log(data.length); 
});
//读取完毕后, 执行 end 回调 
rs.on('end', () => {
  console.log('读取完成')
})

三、文件重命名和移动

rename 或 renameSync 来移动或重命名 文件或文件夹

语法:

fs.rename(oldPath, newPath, callback)

fs.renameSync(oldPath, newPath)

参数说明:

oldPath 文件当前的路径

newPath 文件新的路径

callback 操作后的回调

fs.rename('./like.txt', './like/likemore.txt', (err) =>{

if(err) throw err;

console.log('移动完成')

});

fs.renameSync('./like.txt', './like/likemore.txt');

语法:fs.unlink(path, callback) fs.unlinkSync(path)

参数说明: path 文件路径 callback 操作后的回调

const fs = require('fs');
fs.unlink('./test.txt', err => { if(err) throw err; console.log('删除成功'); });
fs.unlinkSync('./test2.txt');

四、文件夹操作(创建、读取、删除)

1、mkdir 或 mkdirSync 来创建文件夹

语法:fs.mkdir(path[, options], callback) fs.mkdirSync(path[, options])

参数说明: path 文件夹路径 options 选项配置( 可选 ) callback 操作后的回调

//异步创建文件夹
fs.mkdir('./page', err => { 
  if(err) 
   throw err; 
  console.log('创建成功'); 
}); 
//递归异步创建
fs.mkdir('./1/2/3', {
  recursive: true
},
   err => { 
  if(err) 
   throw err; 
  console.log('递归创建成功');
}); //递归同步创建文件夹

fs.mkdirSync('./x/y/z', {recursive: true});

2、 readdir 或 readdirSync 来读取文件夹

语法:fs.readdir(path[, options], callback) fs.readdirSync(path[, options])

参数说明: path 文件夹路径 options 选项配置( 可选 ) callback 操作后的回调

//异步读取
fs.readdir('./like', (err, data) => { 
  if(err) 
  throw err; 
  console.log(data); 
}); 
//同步读取 
let data = fs.readdirSync('./like'); 
console.log(data);

3、rmdir 或 rmdirSync 来删除文件夹

语法:fs.rmdir(path[, options], callback) fs.rmdirSync(path[, options])

参数说明: path 文件夹路径 options 选项配置( 可选 ) callback 操作后的回调

//异步删除文件夹
fs.rmdir('./page', err => { 
  if(err) 
  throw err;
 console.log('删除成功'); 
}); 
//异步递归删除文件夹 recursive代表递归配置项
fs.rmdir('./1', 
   {recursive: true}, err => { 
  if(err) {
  console.log(err); 
 }
  console.log('递归删除') 
});
//同步递归删除文件夹
fs.rmdirSync('./x', {recursive: true})

五、相对路径问题

fs 模块对资源进行操作时,路径的写法有两种:

相对路径 ./like.txt 当前目录下的like.txt like.txt 等效于上面的写法 ../like.txt 当前目录的上一级目录中的like.txt

绝对路径 D:/Program Files windows 系统下的绝对路径 /usr/bin Linux 系统下的绝对路径

相对路径中所谓的当前目录,指的是命令行的工作目录 ,而并非是文件的所在目录

所以当命令行的工作目录与文件所在目录不一致时,会出现一些BUG


六、__dirname

__dirname 与 require 类似,都是 Node.js 环境中的'全局'变量 __dirname 保存着 当前文件所在目录的绝对路径 ,可以使用 __dirname 与文件名拼接成绝对路径 代码示例: 使用 fs 模块的时候,尽量使用 __dirname 将路径转化为绝对路径,这样可以避免相对路径产生的 Bug


前端小白,仅此记录学习分享,如有问题欢迎指正! 参考资料:尚硅谷2023版Node.js零基础视频教程,nodejs新手到高手_哔哩哔哩_bilibili

node.js:Node.js 教程 | 菜鸟教程 (runoob.com)