简单了解一下:NodeJS的fs文件系统

NodeJS提供了fs模块来本地文件。大致有这些内容:

文件读写

在操作文件之前,我们需要检查一下这个文件是否存在,fs模块提供了access方法,语法如下:fs.access(path,mode,callback)

path:就是文件路径;

mode:表示文件的可访问性,默认值是fs.constants.F_OK,这个值都是常量,有这几种类型:

callback:回调函数,返回的是检查文件的可访问情况,代码如下:

javascript 复制代码
const fs = require('fs');

fs.access("./build.json", fs.constants.F_OK, (err) => {
   if(err){
    console.log("文件不存在",err);
    return;
   }

   console.log("文件存在")
})

正如山兔所示,当检查的文件不存在时候,就会返回对应的错误类型。

相关的错误类型如下:

如果想通过同步的方法来执行的话,就调用这个方法accessSync()。

文件读取

readFile()和readFileSync()

fs有两个方法来读取文件,分别是readFile()和readFileSync(),两个方法的区别是readFile方法为异步读取,readFileSync为同步读取。

语法如下:

javascript 复制代码
fs.readFile(file,encoding,callback)
fs.readFileSync(file,encoding)

encoding:表示文件的编码格式,callback是回调函数【通常情况下,异步操作都会设置回调函数来处理结果】

实例代码如下:

javascript 复制代码
const fs = require('fs');
fs.readFile("./build.json", "ascii", (err, data) => {
   if (err) {
      console.log(err)
      return;
   }

   console.log("文件内容:", data)
})

结果如下:

这是读取文件内容。如果需要将内容写入文件中,则有以下4个方法:

  1. writeFile();
  2. writeFileSync();
  3. appendFile();
  4. appendFileSync();

writeFile()和writeFileSync()

这两个方法的语法如下:

javascript 复制代码
fs.writeFile(file, data[, options], callback)
fs.writeFileSync(file, data[, options])

其中的参数data就是要写入文件的内容,以上面的代码为例,将读取到的内容写入另一个文件中【其实也就是新增一个文件】,修改后代码如下:

javascript 复制代码
const fs = require('fs');

fs.readFile("./build.json", "ascii", (err, data) => {
   if (err) {
      console.log(err)
      return;
   }

   console.log("文件内容:", data);

   fs.writeFile("test.json", JSON.stringify({
      data,
      name: "duxin"
   }), "utf-8", (err) => {
      if (err) {
         throw error
      }

      console.log("异步写入文件完成")
   })
})

新增文件test.json的内容如下:

javascript 复制代码
{"data":"{\n    \"apps\": [\n        {\n            \"name\": \"build.json\",\n            \"script\": \"npm run start\"\n        }\n    ]\n}","name":"duxin"}

appendFile()方法和appendFileSync()方法

这两个方法则是向文件追加内容,比如:

javascript 复制代码
fs.appendFile("test.json","添加测试内容",(err)=>{
   if(err){
      return;
   }

   console.log("添加完成")
})

在上面的几个案例代码,添加了异常处理,这都是异步的异常处理,如果是同步操作,那么如何处理异常呢?

答案是使用try-catch语句来处理,例如:

javascript 复制代码
//引入模块
var fs = require('fs');
//文件读取
try {
     var data = fs.readFileSync('textfile.txt', 'utf8');
     console.log(data);
} catch (e) {
     console.log(e);
}
//文件写入
try {
     fs.writeFileSync('textfile.txt', 'Hello World .. !', 'utf8');
     console.log('完成文件写入操作');
} catch (e) {
     console.log(e);
}

截断文件

当遇到文件太大的时候,一般情况我们会截取文件的一部分。那么在NodeJS中,就是通过truncate()方法来完成文件的截取。语法如下:

javascript 复制代码
fs.truncate(path[, len], callback)

path:就是要截取的文件名以及文件路径

len:是一个整数,用于指定截断后文件的大小,单位是字节

callback:用于指定截断文件操作完毕时执行的回调函数,该回调函数中使用一个参数,参数值为截断文件操作失败时触发的错误对象。

但是len等于0的时候,截取后的文件为空

案例代码:

javascript 复制代码
var fs = require('fs');
fs.stat("poems.txt",function(err,stats){
     console.log("原文件大小为:"+stats.size+"字节")
})
fs.truncate('poems.txt', 140, function (err) {
     if (err) console.log('对文件进行截断操作失败。');
     else {
          fs.stat('poems.txt', function (err, stats) {
               console.log('截断操作已完成\n文件大小为:' + stats.size + '字节。');
          });
     }
});

unlink()方法,删除文件

案例代码:

javascript 复制代码
fs.unlink("./test.json",(err)=>{
   if(err){
      console.log("文件删除报错了")
   }

   console.log("文件删除成功")
})

copyFile()方法与copyFileSync()方法复制文件

语法如下:

javascript 复制代码
fs.copyFile(src, dest[, mode], callback)
fs.copyFileSync(src, dest[, mode])

src:要复制的源文件名。

dest:要复制的目标文件名。

mode:复制操作的修饰符,默认值为0。

callback:回调函数。

代码如下:

javascript 复制代码
fs.copyFile("fs.js","test.js",(err)=>{
   if(err){
      console.log("文件复制失败");

      return;
   }

   console.log("文件复制成功!")
})

创建目录:mkdir()和mkdirSync()方法

创建目录,也就是创建文件夹,语法如下:

javascript 复制代码
fs.mkdir(path[, options], callback)
fs.mkdirSync(path[, options])

path:就是要创建文件的位置;

options:指定这个文件的权限;

callback:回调函数,返回一个参数,表示创建文件夹是否成功。

读取目录

通过readdir()方法或者readdirSync()方法来实现读取文件目录,语法如下:

javascript 复制代码
fs.readdir(path[, options], callback)

案例代码:

javascript 复制代码
const fs = require("fs");
fs.readdir("src", (err, data) => {
  if (err) return;
  console.log(data)
})

返回一个数组,是该文件夹下的一级目录:

删除目录,就是使用这个方法rmdir ()【只能删除空文件夹】

获取文件或者文件夹信息,就用stat方法,返回文件的大小、类型等等信息,可以通过对应的属性来判断文件是否是文件夹,还是文件。例如:

javascript 复制代码
const fs = require("fs")
fs.stat("b.txt", function (err, stats) {
     console.log("是否为文件", stats.isFile())
     console.log("是否为文件夹/目录", stats.isDirectory())
})

这就是最近用到相关文件操作的API。

相关推荐
用户2986985301433 分钟前
在 React 中拆分 Excel 文件:从工作表到行列的实践
javascript·react.js·excel
想要成为糕糕手42 分钟前
238. 除了自身以外数组的乘积 — 面试向深度解析
javascript·算法·面试
玖玥拾43 分钟前
C# 语言进阶(十三)网络 DLL 库分层设计
服务器·开发语言·网络·网络协议·c#
kisshyshy43 分钟前
前端存储、表单异步提交与 this 指向完全指南
前端·javascript·html
Kel1 小时前
管道、IPC、Socket:你以为的三种技术,其实是同一件事
javascript·设计模式·node.js
2601_949816351 小时前
C++内存对齐与结构体填充深度精讲:底层规则、内存裁剪、适配优化与工程避坑
开发语言·arm开发·c++
心中有国也有家1 小时前
AtomGit Flutter 鸿蒙客户端: AnimatedScale 与 AnimatedContainer 联合实战
android·javascript·flutter·华为·harmonyos
浩瀚地学1 小时前
【面试算法笔记】0105-数组-螺旋矩阵
java·开发语言·笔记·算法·面试
嘉泰姆半导体官方1 小时前
CXAR41337C 双通道数字音频功放 | 2×20W | EQ+DRC | I²S | MCLK-Less - 嘉泰姆电子
前端·javascript·数据库
胡萝卜术1 小时前
从逐一合并到多路归并:力扣23「合并K个升序链表」的三种解法进化之路
前端·javascript·面试