nodejs中常用文件操作API及相关API

Node.js 调用 DeepSeek API 完整指南 本文将介绍如何使用 Node.js 调用 DeepSeek API,实现流式对话并保存对话记录。Node.js 版本使用现代异步编程方式实现,支持流式处理和错误处理。Node.js 版本的 DeepSeek API 实现充分利用了异步编程特性,提供了流畅的对话体验和完善的错误处理机制。代码结构清晰,易于维护和扩展。 阅读详情

很久没搞nodejs了 , node版本从4升到7 , 迭代很快,现在过来复习一下文件相关的api,虽说有些api不推荐使用或者说过时了,但是还能跑 :)

  • readFile 和 readFileSync
    同步读取文件和异步读取文件,在官方文档上已经说的很清晰了,API也讲的很明白,只要玩好API就行。

    "use strict";
    const fs = require('fs');
    
    // 简单的异步读取
    fs.readFile('yourFilePath','utf8',function(err,data){
        if(err) throw err;
        console.log(data);
    });
    
    // 简单的同步读取
    try{
        var data = fs.readFileSync('yourFilePath','utf8');
        console.log(data); // 文件数据
    }catch(e){
        console.log(e);
    }
    
  • writeFile 和 writeFileSync
    同步和异步读写文件

    "use strict";
    const fs = require('fs');
    const path = require('path');
    
    // 注意这两种方式都会对文件造成覆盖写入。
    // 且只能针对小文件。
    
    // 异步写入
    fs.writeFile(path.join(__dirname,'yourFileName'),'hello',function(err){
        if(err) console.log(err.code);
        console.log('文件异步写入成功!');
    });
    
    // 同步写入
    try {
        fs.writeFileSync(path.join(__dirname, 'yourFileName'),'world');
        console.log('文件同步写入成功!');
    } catch(e) {
        console.log('文件同步写入失败!');
    }
    
  • exists 和 existsSync
    判断文件是否存在,同步和异步方式 , 验证文件是否存在api

    "use strict";
    const fs = require('fs');
    const path = require('path');
    
    let _path = path.join(__dirname,'yourFileName');
    // 异步
    fs.exists(_path,(exists)=>{
        console.log('exists ' + exists);
    });
    
    // 同步判断文件是否存在
    var flag = fs.existsSync(_path);
    console.log('flag ' + flag);
    
  • stat 和 statSync
    获取文件信息API

    "use strict";
    const fs = require('fs');
    const path = require('path');
    
    let _path = path.join(__dirname,'yourFileName');
    
    // 异步获取文件信息API
    fs.stat(_path,(err,stats)=>{
        if (err) throw err;
        console.log(`文件大小: ${stats.size} 字节`);
        console.log(`文件创建时间: ${stats.ctime} `);
        console.log(`文件最后访问时间: ${stats.atime} `);
    
        // 判断路径是文件或者是文件夹
        if(stats.isFile()){
            console.log('该路径代表一个文件');
        }else if(stats.isDirectory()){
            console.log('该路径代表一个目录');
        }
    });
    
    // fs 同步读取文件信息
    let stats = fs.statSync(_path);
    
    if(stats.isFile()){
        console.log('同步方式,该路径代表一个文件');
    }else if(stats.isDirectory()){
        console.log('同步方式,该路径代表一个目录');
    }
    
  • rmdir 和 rmdirSync
    删除文件夹,同步和异步方式

    "use strict";
    
    const fs = require('fs');
    const path = require('path');
    
    let _path = path.join(__dirname,'yourDir');
    
    // 进行删除和创建文件夹的时候都要先判断文件是否存在
    
    // 异步方式删除
    fs.exists(_path,(exists)=>{
      if(exists){
          // 如果存在,则删除目录
          return fs.rmdir(_path,(err)=>{
              if(err) return console.log('文件删除失败!');
              console.log('文件删除成功');
          });
      }
      // 如果不存在,才去创建目录
      fs.mkdir(_path,(err)=>{
          if (err) return console.log('目录未创建成功!');
          console.log('目录创建成功!');
      });
    });
    
    // 同步方式 (如果存在,删除;不存在,创建)
    var flag = fs.existsSync(_path);
    flag ? fs.rmdirSync(_path) : fs.mkdirSync(_path);
    
  • watchFile 和 unwatchFile 以及 watch
    监听文件变化和停止监听

    "use strict"
    
    const fs = require('fs');
    const path = require('path');
    let filePath = path.join(__dirname,'yourFileName');
    let filePath2 = path.join(__dirname,'yourFileName2');
    
    // 参数
    var json = {
      persistent:true,
      interal:100
    };
    
    // 监听器
    var listener = function(cur,pre){
    console.log(`当前文件修改时间:${cur.mtime}`);
    console.log(`上次文件修改时间:${pre.mtime}`);
    };
    
    // 监视文件的变化
    fs.watchFile(filePath,json,listener);
    
    // 3s 后停止监听文件变化
    setTimeout(function(){
      console.log('go');    
      fs.unwatchFile(filePath,listener);
    },3000);
    
    // 使用watch监听----------------------------
    
    // 参数
    var option = {
        persistent:true,
        recursive:true,
        encoding:'utf8'
    }
    
    // 监视器
    var watchListener = function(eventType, filename){
       console.log('eventType ' + eventType);
       console.log('filename ' + filename);
    }
    
    // 开始监听
    var watcher = fs.watch(filePath2,option,watchListener);
    
    // 1s 后停止监听
    setTimeout(function(){
      console.log('goes');    
      watcher.close();
    },1000);
    
    • 备注: The fs.watch API is not 100% consistent across platforms, and is unavailable in some situations. The recursive option is only supported on OS X and Windows.
  • readStream 和 writeStream
    文件读取流和文件写入流

    "use strict";
    
    const fs = require('fs');
    const path = require('path');
    let filePath = path.join(__dirname, 'yourFileName') ;
    let distPath =  path.join(__dirname, 'fileNameYouWant');
    
    // 创建一个文件读取流
    let readStream = fs.createReadStream(filePath);
    
    // 创建一个文件写入流
    let writeStream = fs.createWriteStream(distPath);
    
    // 读取流的 data 事件会被不停触发
    readStream.on('data', function (chunk) {
      writeStream.write(chunk); // 读一点,写一点儿
    });
    
    // 读取结束将会触发 end 事件
    readStream.on('end', function (chunk) {
      console.log('拷贝结束');
    });
    
  • 使用pipe管道来边读边写

    "use strict";
    
    const path = require('path');
    const fs = require('fs');
    
    let filePath = path.join(__dirname,'yourFileName');
    let distPath = path.join(__dirname,'fileNameYouWant');
    
    fs.createReadStream(filePath).pipe(fs.createWriteStream(distPath));
    
  • readline 按行来读取

    "use strict";
    
    const path = require('path');
    const fs = require('fs');
    const readline = require('readline');
    
    let json = {
        input:fs.createReadStream(path.join(__dirname,'theFileYouWantCopy'),'utf8')
    }
    
    let distPath = path.join(__dirname,'fileYouWantGenerate');
    
    const rl = readline.createInterface(json); // 创建一个行文件读取接口
    
    // 读取行事件
    rl.on('line',(line)=>{
        // fs.appendFile 不会覆盖原文件
        fs.appendFile(distPath,'\n' + line,'utf8',(err)=>{
            if(err) return console.log(err);
            console.log('do line copy');
        });
    });
    
    // 读取完毕事件
    rl.on('close',()=>{
        console.log('读取完成!'); // 上面fs.appendFile是异步,此处可能会先输出,没有什么影响。
    });
    
  • 其他问题

    • 文件编码转换 ,在nodejs中有个插件:iconv-lite
    • 首先安装插件: npm i --save iconv-lite
    • 示例代码:

      "use strict";
      
      const fs = require('fs');
      const iconv = require('iconv-lite');
      const path = require('path');
      
      let filePath = path.join(__dirname,'gbk.txt'); // 假设这是你的gbk编码的文件
      let distPath = path.join(__dirname,'utf8.txt'); // 假设这是你想重新输出的utf8文件
      
      fs.readFile(filePath,function (err, data) {
        if (err) throw err;
        // iconv的decode方法就可以用来解码,需指定一个原始的二进制数据和字符集编码
        let res =iconv.decode(data, 'gbk');
        // 先判断是否存在,存在则append , 不存在,直接写。
        fs.exists(distPath,(exists)=>{
          if(exists){
            fs.appendFile(distPath,'\n' + res,'utf8',(err)=>{
              if(err) throw err;
              console.log('追加成功!');
            });
          }else{
            fs.writeFile(distPath,res,'utf8',(err)=>{
              if(err) throw err;
              console.log('写入完成!');
            });
          }
        });
      });
      
    • 操作文件扩展包地址:fs-extra点击这里

    • 常用nodejs第三方包: node-awesome
NodeJS中使用N-API(NODE-API)去调用已经存在的dll. 在之前的一篇文章中,介绍了编写NodeJS AddOn的三种方式,N-API已经是AddOn的未来,N-API摆脱了Node各个大版本引用的chrominumV8不一致导致的API修改的问题。在之前的文章中介绍了N-API是Node team自己维护的,N-API内部会做V8中api匹配的问题。下面用一个例子来学习写一个N-API来调用已经存在的dll. 1.写一个dll 利用机器上安装的vs2017(各个版本都可以),创建一个c++的动态链接库工程。 在工程里创建一个接口文件InterfaceH.. 阅读详情

相关推荐

使用nodejs 本地部署ArcGIS JS API

之前部署ArcGIS JS API在网上大多都是搜到用IIS来进行部署的。如果在非windows系统下进行部署,就无法使用这种方法了。刚好最近在用node js ,就尝试用node进行本地部署API,希望能帮到有类似需求的人。 1.首先是安装nodejs环境,这里是nodejs的下载链接:http://nodejs.cn/download/,windows下的安装十分简单,就不做介绍了。...

u012632557的博客 1657

nodejs写api给前端调用

1.npm init 生成package.json文件 2. 安装依赖 npm install express –save npm install body-parser –save 3.新建app.js 4.新建index.html 代码如下: 服务器端 app.js var express=require('express'); var app =express(); ...

qq_34117170的博客 1万+

node调用接口获取数据,并发送邮件

公司要求晚上营业结束后 通过givex的接口获取这1w个用户的积分余额,会员等级,过期积分,及续期积分及续期日信息,所以就写了这个

fs-extra 文件操作的常用API

fs-extra 是一个比 node 内置 fs 模块更安全、更强大的文件操作库,支持 promise 和 async/await,为使用者免去了很多心理负担。

天问博客-专注于大前端技术 1240

Python+Seaborn可视化:双因素方差分析结果这样呈现更专业

本文详细介绍了如何利用Python中的Seaborn和statsmodels库,专业地执行并可视化双因素方差分析结果。通过模拟实验数据,演示了从模型构建、统计检验(包括交互作用分析)到诊断验证的全流程。重点展示了如何使用Seaborn绘制交互效应图、组合分布图及热图,将复杂的统计结果转化为直观、富有洞察力的可视化图表,助力科研论文与商业报告的专业呈现。

weixin_29274969的博客 137

WRF中使用ERA5再分析数据

   本人在做一些实例时,需要用到最新的ERA5再分析数据集,其中我下载的是ERA5 hourly data on pressure levels form 1979 to present和ERA5 hourly data on single levels from 1979 to present中的3天数据。 1、注册climate copernicus账号 下载ERA5数据前先要注册其账号 2、选择变量    WRF中对于气象数据的字段有具体的要求, ......

GIS 8172

nodejs使用rpc发送get/post请求调用第三方api接口

nodejs中发送get,post请求调用api接口

稻草人的格子衫 3498

aubo i5 + realsense D435i识别抓取实践二

aubo i5 + realsense D435i识别抓取实践二前言一、手眼标定是什么?二、标定软件安装1.aruco_ros安装2.vision_visp安装3.easy_handeye安装4.realsense驱动安装5.安装realsense ROS软件包三、配置1.launch文件修改2.打印二维码四、手眼标定1.启动launch文件2.标定步骤3.发布tf关系 前言 前面配置好了aubo机械臂的ROS软件包,机械臂可以正常运行后,接下来我们进行机械臂与相机的手眼标定。手眼标定分为eye_on_ha

转角 6377

fs-extra 操作文件

学习fs 的替代品 fs-extra在各种前端开工具链当中,大多都会操作文件

deai_dai的博客 4340

Python大数据舆情分析系统开发实战

舆情监测系统是大数据分析的重要应用场景,通过自然语言处理(NLP)技术解析社交媒体文本情感倾向。基于Python技术栈的解决方案整合了Scrapy爬虫框架进行数据采集,PySpark处理海量文本数据,结合SnowNLP和Jieba实现中文语义分析。系统采用微服务架构设计,包含数据采集层、处理层、存储层和应用层,通过情感分析优化和实时热点检测算法提升监测准确率。典型应用包括企业品牌监测、公共事件预警等场景,开发过程中需特别注意数据合规性和分布式集群的性能调优。

weixin_34408624的博客 388

手把手教你新建一个winform项目(史上最全)

本文介绍如何利用visual studio新建一个winform程序

qq_34059233的博客 4万+

NodeJS文件操作

  让前端觉得如获神器的不是NodeJS能做网络编程,而是NodeJS能够操作文件。小至文件查找,大至代码编译,几乎没有一个前端工具不操作文件。换个角度讲,几乎也只需要一些数据处理逻辑,再加上一些文件操作,就能够编写出大多数前端工具。本章将介绍与之相关的NodeJS内置模块。   NodeJS提供了基本的文件操作API,但是像文件拷贝这种高级功能就没有提供,因此我们先拿文件拷贝程序练手...

weixin_30251829的博客 220

【OpenClaw企业级智能体实战】第09篇:OpenClaw金融投研实战:17个场景+完整代码,打造专属数字研究员

金融投研面临信息过载、流程重复、数据安全合规三大核心痛点,OpenClaw作为本地部署的新一代AI智能体,凭借“长期记忆+主动执行+数据不出域”的优势,成为券商分析师集体追捧的效率工具。本文基于8家头部券商公开研报,拆解OpenClaw在金融投研的17个核心应用场景(信息处理、研报撰写、量化策略、流程自动化),详解原理、技术选型、实操流程,并提供可直接运行的完整代码与执行结果。文章兼顾新手入门与进阶提升,强调安全隔离部署与幻觉防范,读者可按步骤搭建专属投研智能体,将信息处理、数据整理等重复工作效率提升80%

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 678

NodeJS 之 fs 模块(文件操作)

在大多数时候,你应该使用异步方法。异步方法对开发者更为友好,并且使用异步方法也更能发挥好 NodeJS 本身的优势。但也不能对同步方法一味的排斥,在某些情况下(例如读取配置文件并启动服务器),你应该使用同步方法。

两个月亮 5458

基于Matlab的无迹卡尔曼滤波惯性导航与DVL组合导航

航天航空领域中的惯性导航是一种基于惯性测量单元(Inertial Measurement Unit,IMU)的导航方法,可以提供航向、速度和位置等信息。深度/速度测量器(Doppler Velocity Log,DVL)是一种常用的传感器,可用于测量水下航行器的速度。通过将DVL与无迹卡尔曼滤波相结合,可以实现高精度的组合导航。本文介绍了基于Matlab的无迹卡尔曼滤波(UKF)惯性导航与DVL组合导航的方法。以上是一种简化的示例代码,您可以根据实际应用需求进行相应的修改和优化。

DevSavantX的博客 422

大厂面经:京东大数据面试题及参考答案(3万字长文)

Kafka是一个开源的分布式流处理平台,由 LinkedIn 开发并在 2011 年贡献给 Apache 软件基金会。高吞吐量:能够处理大量的数据流,适合实时数据管道。持久性:数据存储在磁盘上,确保数据不丢失。容错性:通过数据复制提供高可用性。扩展性:支持水平扩展,易于增加更多节点。Kafka 的核心概念Topic:逻辑上的数据流,可以理解为主题。Producer:生产数据的应用程序。Consumer:消费数据的应用程序。Broker:Kafka 集群中的服务器节点。Partition。

大模型大数据攻城狮的专栏 863

NodeJS学习之文件操作

NodeJS -- 文件操作 Buffer(数据块) JS语言自身只有字符串数据类型,没有二进制数据类型,因此NodeJS提供了一个与String对等的全局构造函数Buffer来提供对二进制数据的操作。除了可以读取文件得到Buffer的实例外,还能够直接构造,例如: var bin = new Buffer([0x68, 0x65, 0x6c, 0x6c, 0x6f]); ...

aby2106的博客 182

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

nodejs核心模块以及相关常用api

使用: var path = require('path');:将一系列路径或路径段解析为绝对路径。1、存在多个路径段时,只有最右边的有效2、如果没有参数传递,path.resolve()将返回当前工作目录的绝对路径3、如果调用后没有产生绝对路径,如:path.resolve("index.html"),则会默认拼上当前工作目录的绝对路径,效果等同于:path.resolve(__dirname, "index.html")

qq_32445707的博客 687

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

NodeJS-API

NodeJS是C语言开发的V8引擎,代码格式是JS写法的,做了服务器语言的一门编程语言 NodeJS更新速度非常的快,所以很多的API更改删除很快,所以要保证版本一致,框架也是,插件也是,不符合版本运行起来就会报错,说找不到这个方法什么的 我们知道浏览器JS分为Dom+Bom+ES56789,而NodeJS明显没有Dom,Bom是运行环境带来的方法,Bom在浏览器是window对象,cookie,浏览历史等等,而NodeJS就没有这些了,他的Bom是下载node的时候带来的,也就是官网文档显示的那些,ES

weixin_45946796的博客 653

Nodejs文件操作 api 总结

1、fs.stat(path, [options],callback) 返回表示文件各方面信息的对象。该方法用于检测文件的状态,可以借此来判断某个文件是否存在。path参数传入该文件的绝对物理路径,该callback回调函数有两个参数err和stats。其中err为错误信息参数,stats为一个文件状态对象。 2、fs.writeFile(path,data[,options],callback) 该方法可用于往指定文件当中写入内容,该内容会覆盖文件当中原有的内容。若传入的文件路径当中的文件不存在,则先完成

Baron的技术blog 303

NodeJS常用库

NodeJS常用库 文章目录NodeJS常用库系统监控nodemon系统进程execa文件处理PDFKitDocxOfficegenmammothNode-fs-extraChokidarChalk视频音频node-fluent-ffmpegffbinaries-nodepeerflix图像处理face-api.js视频教程自动化Puppeteer 系统监控 nodemon github npm ...

weixin_45921990的博客 2034

Ubuntu Nodejs以及相关工具的安装

推荐使用方法二或方法三,可以获得更新的Node.js版本,以支持最新的JavaScript特性和工具。安装)通常是跨项目通用的命令行工具,能显著提升开发效率。Node.js 的全局工具(通过。

clehley的博客 1206

【高级前端进阶】nodeJS前端大师进阶课01——nodeJS核心API

nodeJS前端大师进阶课——nodeJS核心API

silverclayz的技术分享 1147

nodejs 常用模块

推荐的入门教程:     《七天学会NodeJS》  https://github.com/nqdeng/7-days-nodejs     《Node.js 包教不包会》 https://github.com/alsotang/node-lessons   常用内置模块:     fs 提供对文件的操作。http://nodejs.org/api/fs.html    http://n...

或许丶Blog 539

NodeJS 基础 API

在介绍 NodeJS 的基础 API 前,先抛出 API 中文文档地址:http://nodejs.cn/api/ path path 顾名思义就是与路径相关的一切,在 path 模块中提供了一些工具函数,用于处理文件与目录的路径。我们可以通过以下方式使用: const path = require('path'); normalize – 该方法将我们传入的可能不太规范的路径转化成规范的路径 ...

weixin_39749820的博客 1040

NodeJs教程含NodeJS API介绍中文版:助力NodeJS学习与实践

NodeJs教程含NodeJS API介绍中文版:助力NodeJS学习与实践 去发现同类优质开源项目:https://gitcode.com/ NodeJs教程含NodeJS API介绍中文版,为初学者提供全面的学习资源。 项目介绍 在当今快节奏的互联网开发领域,NodeJs凭借其高效的性能和灵活的架构,成为了众多开发者的首选技术。为此,NodeJs教程含NodeJS API介绍中文版项目应运而生...

gitblog_06710的博客 403
上一篇: 考研英语 - word-list-6
下一篇: nodejs中文件路径相关API:path
Wang's Blog
博客等级 码龄12年 7438粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值