简单了解一下: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。

相关推荐
小陈同学呦3 小时前
前端如何处理订单状态导航的数据竞态问题
前端·javascript
开发者每周简报3 小时前
网海三部曲·无名宗师传
javascript·人工智能
isyangli_blog4 小时前
OpenDayLight (Carbon 版本) 启动与组件安装
开发语言·php
vb2008114 小时前
FastAPI APIRouter
开发语言·python
Benszen4 小时前
KVM虚拟化解决方案
开发语言·perl
会编程的土豆4 小时前
Go 语言反射(Reflection)详解
开发语言·后端·golang
東雪木4 小时前
多线程与并发编程 专属复习笔记
java·开发语言·笔记·java面试
杨充4 小时前
1.3 浮点型数据设计灵魂
开发语言·python·算法
噜噜噜阿鲁~4 小时前
python学习笔记 | 11.3、面向对象高级编程-多重继承
java·开发语言
basketball6165 小时前
Go 语言从入门到进阶:4. 数组和MAP使用方法总结
开发语言·后端·golang