简单了解一下:NodeJS的fs文件系统
  VJpXGY9Pywpe 2023年11月02日 72 0


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

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

文件读写

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

path:就是文件路径;

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

简单了解一下:NodeJS的fs文件系统_回调函数_02


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

const fs = require('fs');

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

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

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


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

简单了解一下:NodeJS的fs文件系统_回调函数_04


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

文件读取

readFile()和readFileSync()

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

语法如下:

fs.readFile(file,encoding,callback)
fs.readFileSync(file,encoding)

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

实例代码如下:

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

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

结果如下:

简单了解一下:NodeJS的fs文件系统_回调函数_05


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

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

writeFile()和writeFileSync()

这两个方法的语法如下:

fs.writeFile(file, data[, options], callback)
fs.writeFileSync(file, data[, options])

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

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的内容如下:

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

appendFile()方法和appendFileSync()方法

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

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

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

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

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

//引入模块
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()方法来完成文件的截取。语法如下:

fs.truncate(path[, len], callback)

path:就是要截取的文件名以及文件路径
len:是一个整数,用于指定截断后文件的大小,单位是字节
callback:用于指定截断文件操作完毕时执行的回调函数,该回调函数中使用一个参数,参数值为截断文件操作失败时触发的错误对象。

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

案例代码:

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()方法,删除文件

案例代码:

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

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

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

语法如下:

fs.copyFile(src, dest[, mode], callback)
fs.copyFileSync(src, dest[, mode])

src:要复制的源文件名。
dest:要复制的目标文件名。
mode:复制操作的修饰符,默认值为0。
callback:回调函数。

代码如下:

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

      return;
   }

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

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

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

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

path:就是要创建文件的位置;
options:指定这个文件的权限;
callback:回调函数,返回一个参数,表示创建文件夹是否成功。

读取目录

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

fs.readdir(path[, options], callback)

案例代码:

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

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

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

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

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

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

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


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
VJpXGY9Pywpe