您现在的位置是:网站首页> 编程资料编程资料

总结Node.js中9种fs模块文件操作方法(文件夹递归删除知识)_node.js_

2023-05-24 444人已围观

简介 总结Node.js中9种fs模块文件操作方法(文件夹递归删除知识)_node.js_

本文主要介绍了Node.js常用的文件操作方法,以及常见的处理场景,文件追加,文件夹递归删除等。

一、前言

  • fs.mkdir()
  • fs.writeFile()
  • fs.appendFile()
  • fs.stat()fs.readFile()
  • fs.readdir()
  • fs.rename()
  • fs.unlink()
  • fs.rmdir()

二、fs.mkdir()创建文件夹

异步的创建一个文件夹:

语法:

fs.mkdir(path[,options],callback) /** * path  |  |  * options  |  * recursive  默认值: false * mode  |  Windows 上不支持。 默认值: 0o777。 * callback  * err  * path  |  仅当创建目录时将 recursive 设置为 true。 */

2.1 最简单的案例

最简单的案例,在当前目录下创建一个temp文件夹:

const fs = require('fs') fs.mkdir('./temp',(err)=>{ if(err){ console.log(err.message) return } console.log('创建文件夹成功') }) 

代码执行结果:

2.2 递归创建文件夹

使用参数{recursive:true}创建多层次的文件夹。

fs.mkdir('./parent/son/grandson',{recursive:true},(err,path)=>{ if(err){ console.log(err.message) return } console.log('递归创建文件夹成功',path) })

代码执行结果:

注意: 在使用{recursive:true}参数时,回调对应的会增加一个path参数,其他情况下没有。

三、fs.wirteFile()创建、写文件

file 是文件名时,将数据异步地写入文件,如果文件已存在则替换该文件。 data 可以是字符串或缓冲区。

file 是文件描述符时,其行为类似于直接调用 fs.write()本文不涉及这种情况)。

语法:

fs.writeFile(file, data[, options], callback) /** * file  |  |  |  文件名或文件描述符 * data  |  |  |  |  * options  |  * encoding  |  默认值: 'utf8' * mode  默认值: 0o666 * flag  请参阅对文件系统 flags 的支持。 默认值: 'w'。 * signal  允许中止正在进行的写入文件 * callback  * err  |  */

3.1 创建并写入一个文件

创建一个名为index.html的文件,并写入一行字符串。

fs.writeFile('./index.html',"

你好,中国

",(err)=>{ if(err){ console.log(err.message) return } console.log("创建写入文件成功") })

代码执行结果如下:

3.2 重写文件并指定编码

重写index.html并为文件指定编码:

fs.writeFile('./index.html','

面朝大海,春暖花开

','utf-8',(err)=>{ if(err){ console.log(err.message) return } console.log('写入指定格式文件成功') })

代码执行效果如下:

原文件内容被覆盖。

3.3 写入GBK格式的文件

Node.js仅支持utf8 ucs2 ascii binary base64 hex这几种格式,对于GBKGB2312等特殊格式需要使用额外的库(这里使用iconv-lite)。

案例:

const iconv = require('iconv-lite') fs.writeFile('./style.css',iconv.encode('面朝大海,春暖花开','gbk'),(err)=>{ if(err){ console.log(err.message) return } console.log("以GBK格式写入成功") })

代码执行结果:

注意底部的编码格式,如果使用utf-8打开文件会乱码的呦!

四、fs.appendFile()文件后追加内容

异步地将数据追加到文件,如果该文件尚不存在,则创建该文件。

语法:

fs.appendFile(path, data[, options], callback) /** * path  |  |  |  文件名或文件描述符 * data  |  * options  |  * encoding  |  默认值: 'utf8' * mode  默认值: 0o666 * flag  请参阅对文件系统 flags 的支持。 默认值: 'a'。 * callback  * err  */

4.1 使用追加的方式创建并写入内容

fs.appendFile('./test.txt', '测试写入', (err) => { if (err) { console.log(err.message) return } console.log("使用追加的方式创建并写入文件") })

代码执行结果:

4.2 追加内容

fs.appendFile('./test.txt', "\n追加测试", (err) => { if (err) { console.log(err.message) return } console.log('在已经存在的文件中追加内容') })

代码执行结果:

五、fs.stat()判断路径是目录还是文件

判断路径是文件还是目录。

语法:

 fs.stat(path[, options], callback) /** * path  |  |  * options  * bigint  返回的  对象中的数值是否应为 bigint。 默认值: false。 * callback  * err  * stats  */

5.1 判断文件案例

判断index.html是文件还是目录。

fs.stat('./index.html',(err,stats)=>{ if(err){ console.log(err.message) return } console.log(`./index.html是文件:${stats.isFile()}`) console.log(`./index.html是目录:${stats.isDirectory()}`) })

代码执行效果:

六、fs.readFile()读取文件内容

异步地读取文件的全部内容。

语法:

fs.stat('./index.html',(err,stats)=>{ if(err){ console.log(err.message) return } console.log(`./index.html是文件:${stats.isFile()}`) console.log(`./index.html是目录:${stats.isDirectory()}`) })

6.1 以默认格式读取文件

以默认的格式(utf-8)读取文件内容:

fs.readFile('./index.html',(err,data)=>{ if(err){ console.log(err.message) return } console.log(`读取文件成功,文件内容是:\n${data}`) })

代码执行结果:

如果要读取的文件不是utf-8格式,就会出现乱码,这时就需要指定读取格式。

6.2 以指定格式(这里是GBK)读取文件

遗憾的是,node.js不支持除了utf8 ucs2 ascii binary base64 hex之外的编码,我们需要使用额外的包(iconv-lite)读取GBK文件:

const iconv = require('iconv-lite') fs.readFile('./index.html',(err,data)=>{ if(err){ console.log(err.message) return } console.log(`读取文件成功,文件内容是:\n${data}`) console.log("读取文件成功,文件内容是:\n",iconv.decode(data,'gbk')) })

代码执行结果如下:

七、fs.readdir()读取文件夹中的内容

读取目录的内容。 回调有两个参数 (err, files),其中 files 是目录中文件名的数组,不包括 '.''..'