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

news/2024/7/24 12:53:20 标签: javascript, 开发语言, node.js

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。


http://www.niftyadmin.cn/n/5112932.html

相关文章

Android 13.0 首次开机默认授予app运行时权限(去掉运行时授权弹窗)第二种方法

1.概述 在13.0的系统产品开发中,在6.0以后对于权限的申请,都需要动态申请,所以会在系统首次启动后,在app的首次运行时,会弹出授权窗口,会让用户手动授予app运行时权限,在由于系统产品开发需要要求默认授予app运行时权限,不需要用户默认授予运行时弹窗,所以需要在首次开…

记一次服务器Cuda驱动崩溃修复过程

基本过程 今天实验室师兄在服务器运行深度学习训练时候得到报错CUDA initialization: Unexpected error from cudaGetDeviceCount()疑似Cuda与NVIDIA显卡驱动沟通中出现了问题,使用nvidia-smi指令时提示Failed to initialize NVML: Driver/library version mismatc…

Java后端开发(十)-- idea(2022版)将 已push 的 远程仓库 的 多条commit记录 进行撤销

目录 1.多次 修改Test01类后,提交到本地仓库 。 2.多次重复 1 的步骤,多次commit成功后,在Git =》Log中会显示,commit记录

《C++高级编程》读书笔记(文章链接汇总)

1、参考引用 C高级编程(第4版,C17标准)马克葛瑞格尔 2、建议先看《21天学通C》 这本书入门,笔记链接如下 21天学通C读书笔记(文章链接汇总) 《C高级编程》读书笔记(一:C和标准库速成…

6、centos7安装DNS服务器结合Nginx Proxy Manager实现局域网自定义域名解析

前言 我想在物理主机(windows11)、虚拟机(CentOS7)、虚拟机上部署的k8s集群所在的局域网内实现自定义域名的访问,通过Nginx Proxy Manager反向代理。 最终效果:在Nginx Proxy Manager的页面配置的域名能准确解析到代理的目标主机…

julia 笔记目录

1 基础 julia 笔记:向量化 . 运算符(广播)-CSDN博客julia笔记:复数-CSDN博客julia笔记:字符和字符串-CSDN博客julia笔记:函数-CSDN博客julia 笔记: 流程控制-CSDN博客julia 笔记:复…

【JavaEE】线程安全的集合类 -- 多线程篇(9)

线程安全的集合类 多线程环境使用 ArrayList多线程环境使用队列多线程环境使用哈希表 多线程环境使用 ArrayList 自己使用同步机制 (synchronized 或者 ReentrantLock)Collections.synchronizedList(new ArrayList); synchronizedList 是标准库提供的一个基于 synchronized 进…

【Docker从入门到入土 3】Docker镜像的创建方法

Part3 一、Docker镜像1.1 镜像的概念1.2 镜像结构的分层 二、Docker镜像的创建2.1 基于现有镜像创建2.1.1 创建思路2.1.2 举个例子 2.2 基于本地模板创建2.3 基于Dockerfile 创建 三、Dockerfile 详解3.1 Dockerfile 操作指令3.1.1 常用的操作指令3.1.2 CMD和ENTRYPOINT的区别…