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

news2024/11/15 10:22:26

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

在这里插入图片描述

文件读写

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

path:就是文件路径;
mode:表示文件的可访问性,默认值是fs.constants.F_OK,这个值都是常量,有这几种类型:
在这里插入图片描述
callback:回调函数,返回的是检查文件的可访问情况,代码如下:

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为同步读取。

语法如下:

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)
})

结果如下:
在这里插入图片描述
这是读取文件内容。如果需要将内容写入文件中,则有以下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)
})

返回一个数组,是该文件夹下的一级目录:
在这里插入图片描述

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1122179.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

最长上升子序列(二分)代码模板

用二分的思想求最长上升子序列的思想就是保持单调性,用一个q[]数组来作为一个单调数组。 每次将a[i]放进q数组中,但是要保持单调性,q数组的长度就是答案。 q[]数组中存的是所以以下标为长度的最长子序列的结尾的最小值。 理解q[]数组的意义…

Python 机器学习入门之C4.5决策树算法

系列文章目录 第一章 Python 机器学习入门之线性回归 第一章 Python 机器学习入门之梯度下降法 第一章 Python 机器学习入门之牛顿法 第二章 Python 机器学习入门之逻辑回归 番外 Python 机器学习入门之K近邻算法 番外 Python 机器学习入门之K-Means聚类算法 第三章 Python 机…

基于FPGA的图像拉普拉斯变换实现,包括tb测试文件和MATLAB辅助验证

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a vivado2019.2 3.部分核心程序 timescale 1ns / 1ps // // Company: // Engineer: // // Create Date: 202…

GDB调试简单介绍

最近和许多同事交流时,发现好多人只是在IDE上debug,但是gdb却一点都不了解;校招新来的同事更是都没听过gdb这个工具,所以在培训时给他们培训了一下;另外好久也没写blog了,刚好把这篇笔记简单分享一下。 0 …

NetSuite SuiteWorld 2023观后感

25年!本周结束的SuiteWorld 2023是NetSuite的25周年庆。 下面两张照片分别来自1998年和今年。同样的人,同样的地点。左二是Evan,NetSuite的主要创始人。 当Evan展望未来25年后NetSuite这四位创始人的样子时。Evan GPT,给出了如下…

XIlinx提供的DDR3 IP与 UG586

DDR系统需要关注的三样东西:控制器、PHY、SDRAM颗粒,但这是实现一个DDR3 IP所需要的,如果只希望调用IP的话,则只需要调用IP即可,目前时间紧急,我先学一学如何使用IP,解决卡脖子的问题&#xff0…

Linux系统管理:虚拟机Kylin OS安装

目录 一、理论 1.Kylin OS 二、实验 1.虚拟机Kylin OS安装准备阶段 2.安装Kylin OS 3.进入系统 一、理论 1.Kylin OS (1)简介 麒麟操作系统(Kylin OS)亦称银河麒麟,是由中国国防科技大学、中软公司、联想公司…

Go-Python-Java-C-LeetCode高分解法-第十一周合集

前言 本题解Go语言部分基于 LeetCode-Go 其他部分基于本人实践学习 个人题解GitHub连接:LeetCode-Go-Python-Java-C 欢迎订阅CSDN专栏,每日一题,和博主一起进步 LeetCode专栏 我搜集到了50道精选题,适合速成概览大部分常用算法 突…

SpringBoot 入门 参数接收

接口声明 RestController //表示该类为请求处理类public class HttpDeal {RequestMapping("/login")//这个方法处理哪一个地址过来的请求public String hello(){return "返回给浏览器";}}接收参数 RequestMapping("/login")public String logi…

Spring框架(四)

1、Spring6整合JUnit 1、JUnit4 User类: package com.songzhishu.spring.bean;import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component;/*** BelongsProject: Spring6* BelongsPackage: com.songzhishu.spring.bean*…

文档的重要性及接口文档模板

随着工作年限的增长,我们逐渐意识到工作中文档的重要性不可忽视。优质的文档不仅能提高工作效率,还能有效降低沟通成本,因此我们必须注重文档的撰写和格式。最近,由于未能及时更新文档,导致在项目开发中出现了信息冲突…

[Golang]多返回值函数、defer关键字、内置函数、变参函数、类成员函数、匿名函数

函数 文章目录 函数多返回值函数按值传递、按引用传递类成员函数改变外部变量变参函数defer和追踪说明一些常见操作实现 使用defer实现代码追踪记录函数的参数和返回值 常见的内置函数将函数作为参数闭包实例闭包将函数作为返回值 计算函数执行时间使用内存缓存来提升性能 参考…

在Lichee RV Dock上的不成功的烧录尝试

最近在学基于risc-v的简单操作系统,刚好手里有块Lichee RV Dock 的板子,所以在学了基础的"hello, world"程序后,想着能不能把这个程序烧录到板子上,简单的做个实验。 要完成这个任务,需要将程序烧录到sd卡上…

文献阅读:The Reversal Curse: LLMs trained on “A is B” fail to learn “B is A”

文献阅读:The Reversal Curse: LLMs trained on “A is B” fail to learn “B is A” 1. 文章简介2. 实验 & 结果考察 1. finetune实验2. 真实知识问答 3. 结论 & 思考 文献链接:https://arxiv.org/abs/2309.12288 1. 文章简介 这篇文章是前…

FPGA设计FIR滤波器低通滤波器,代码及视频

名称:FIR滤波器低通滤波器 软件:Quartus 语言:Verilog/VHDL 本资源含有verilog及VHDL两种语言设计的工程,每个工程均可实现以下FIR滤波器的功能。 代码功能: 设计一个8阶FIR滤波器(低通滤波器&#xff…

使用AI编写测试用例——详细教程

随着今年chatGPT的大热,每个行业都试图从这项新技术当中获得一些收益我之前也写过一篇测试领域在AI技术中的探索:软件测试中的AI——运用AI编写测试用例现阶段AI还不能完全替代人工测试用例编写,但是如果把AI当做一个提高效率的工具&#xff…

关于Git的入门教程(附GitHub和Gitee的使用方法)

一. Git 概述 Git是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。Git易于学习、占地面积小、性能极快。它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。其性能优于Subversion、CVS、Perforce和ClearCas…

基于DF模式的协作通信技术matlab性能仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1、DF概述 4.2、DF基本原理 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2013b 3.部分核心程序 clc; clear; close all; warning off; addpath(genpath(pwd))…

【C++】继承 ⑦ ( 继承中的对象模型分析 | 继承中的构造函数和析构函数 )

文章目录 一、继承中的对象模型分析1、继承代码示例2、基类与派生类内存模型3、问题引入 - 派生类对象构造函数和析构函数调用4、完整代码示例 - 派生类对象内存模型 二、继承中的构造函数和析构函数1、子类构造函数与析构函数调用顺序2、子类构造函数参数列表3、代码示例 - 继…

项目经理之如何组建跨部门项目团队

在跨组织、跨部门、跨专业的临时性合作项目中,如何组建一个高效的跨部门项目团队是确保项目成功实施的关键。本篇幅将介绍如何组建一个成功的跨部门项目团队,包括明确项目目标与范围、确定项目组织模型、明确角色与职责、合理划分团队结构、制定沟通机制…