首页 > 编程语言 >nodeJS文件操作

nodeJS文件操作

时间:2024-05-23 23:08:03浏览次数:29  
标签:文件 fs const log nodeJS rs filename 操作 await

const { log } = require("console");
const fs = require("fs");
const path = require("path");

const filename = path.resolve(__dirname, "./myfiles1.txt");
// console.log(filename)
// fs.readFile(filename,(err,content)=>{
//     console.log( 'read', content.toString('utf-8'))
// })

// fs.writeFile(filename,'fsfsdfs',(err,content)=>{
// console.log('dsfsd',content)
// })

// (async () => {
//   const result = await fs.promises.stat(filename);
//   console.log(result);
// })();

class File {
  constructor(filename, name, ext, isFile, size, createTime, updateTime) {
    this.filename = filename;
    this.name = name;
    this.isFile = isFile;
    this.size = size;
    this.createTime = createTime;
    this.updateTime = updateTime;
    this.ext = ext;
  }

  async getContent(isBuffer = false) {
    if (this.isFile) {
      if (isBuffer) {
        return await fs.promises.readFile(this.filename);
      } else {
        return await fs.promises.readFile(this.filename, "utf-8");
      }
    }
    return null;
  }
  async getChildren() {
    if (this.isFile) return [];
    let children = await fs.promises.readdir(this.filename);
    console.log(children);
    children = children.map((name) => {
      const result = path.resolve(this.filename, name);
      console.log(result);
      return File.getFile(result);
    });
    return Promise.all(children);
  }
  static async getFile(filename) {
    const stat = await fs.promises.stat(filename);
    const name = path.basename(filename);
    const extName = path.extname(filename);
    const isFile = stat.isFile();
    const size = stat.size;
    const createTime = new Date(stat.birthtime);
    const updateTime = new Date(stat.mtime);
    return new File(
      filename,
      name,
      extName,
      isFile,
      size,
      createTime,
      updateTime
    );
  }
}
async function readdir(dirname){
    const dirFile = await File.getFile(dirname)
    return dirFile.getChildren()

}
async function test() {
  //   const filename = path.resolve(__dirname, "./myfiles/1.txt");

  //   const file = await File.getFile(filename);
  //   console.log(await file.getContent());

  const filename = await path.resolve(__dirname, "./myfiles");
  console.log(await readdir(filename))
}
test();
return
const file = path.resolve(__dirname,'./myfiles/1.txt')
//f返回readStream
const rs  = fs.createReadStream(file,{
    encoding:null,
    highWaterMark:1 ,  //每次读取数量   如果encoding有值 那么每次读一个字符  如果没有值 那么每次读一个字节
    autoClose:true //读完自动关闭 默认为true
})
rs.on('open',()=>{
    log('文件被打开了')
})

rs.on('error',(e)=>{
    log('出错了',e.message)
})
rs.on('close',()=>{
    log('文件关闭')
})
// rs.close()


//只有注册了这个事件  才会开始读
rs.on('data',(chunk)=>{
    // log('读到了一部分',chunk)
    rs.pause()
})
rs.on('end',()=>{
    log('结束')
})


rs.on('pause',()=>{
    log('暂停')

    setTimeout(() => {
        rs.resume() 
    }, 10);
})

rs.on('resume',()=>{
    log('恢复')
})
// rs.pause() //暂停读取  出发pause事件
// rs.resume()  //恢复读取  触发resume事件
View Code

 

标签:文件,fs,const,log,nodeJS,rs,filename,操作,await
From: https://www.cnblogs.com/liagon/p/18209548

相关文章

  • C++Linux系统编程——文件和目录操作函数
    stat函数(重要)#include<sys/types.h>#include<sys/stat.h>#include<unistd.h>​intstat(constchar*path,structstat*buf);intlstat(constchar*pathname,structstat*buf);功能: 获取文件状态信息 stat和lstat的区别:   当文件是一个符号......
  • 指令指针和寄存器:深入理解及其计算与操作
    在计算机科学中,指令指针和寄存器是两个关键的概念,它们在处理器执行指令时起着重要作用。本文将详细讲解指令指针和寄存器的基本概念,探讨指令指针的计算和操作,帮助读者深入理解这些底层硬件的工作原理。一、指令指针和寄存器的基本概念1.1指令指针指令指针(InstructionP......
  • nginx常用操作
    安装nginxsudoaptupdatesudoaptinstallnginxwhereisnginxsudosystemctlstartnginx(新版Ubuntu20.**)sudoservicenginxstart(旧版Ubuntu16.**)克隆工程后buildnpminstall安装所有包npmrunbuild打包/usr/share/nginx/html#网站的工程文件存在此目......
  • 在linux中离线安装docker操作指南
    1.在有网络连接的环境下,下载Docker安装包,包名为docker-xx.x.x.tgz。 下载地址:https://download.docker.com/linux/static/stable/x86_64/2.将压缩包上传到目标服务器,解压压缩包。3.执行如下命令卸载旧版docker。 yumremovedocker*4.将解压的所有文件拷贝到/usr/bin目录......
  • 栈和队列1 顺序栈及基本操作实例(进制转换)
    #include<stdio.h>#include<stdlib.h>#defineINITSIZE100#defineINCREAMENT10 typedefstructSqStack{   int*data;   int*top;   intstacksize;}SqStack;voidInitStack(SqStack*L){   L->data=(int*)malloc(INITSIZE*siz......
  • 关于QT的头文件相互包含的问题
    就是我有两个代码,head_test.cpp,head_test.h和head_test2.cpp,head_test2.h。要互相调用对方的类。为了方便看下面我就用A代表head_test,B代表head_test21.head_test.h2.head_test.cpp3.head_test2.h4.head_test2.cpp这两天我在查网上的资料,基本上都是说,需要在头文件中......
  • nodeJS 内置对象
    //const{log}=require("console");//const{argv}=require("process");//log(__dirname)//setImmediate(()=>{//log(__filename)//})//constbuffer=Buffer.from('a1','utf-8')//log(buffer)/......
  • 03-Excel基础操作-学习笔记
    本节接着继续介绍排序工具以及一个重要内容分类汇总工具的使用。01自定义排序我们在上一节接触到了使用排序工具,对数字之类的Excel内置的程序可以通过点击操作,但是当超出Excel内置的范围又当如何应对?比如,存在如下场景:针对文字的排序,我们对销售部门所在列进行排序,顺序为“一部......
  • kubernetes部署mongoDB 单机版 自定义配置文件、密码、日志路径等
    官方镜像地址:https://hub.docker.com/_/mongo?tab=descriptiondocker版的mongo移除了默认的/etc/mongo.conf,修改了db数据存储路径为/data/db.创建configmap配置,注意不能加fork=true,否则Pod会变成Completed。apiVersion:v1kind:ConfigMapmetadata:name:mongodb-confdat......
  • Ubuntu下(跨机)文件、文件夹的拷贝、删除、重命名、移动、备份
    同机操作拷贝命令格式:cp-r源文件目的文件1示例操作:cp-r/home/folderA/usr参数r是指连同源文件中的子目录一同拷贝,就把folderA拷贝到了usr下面2示例操作:cp-r/home/folderA/*/usr/folderA操作将文件夹/home/folderA下面的所有文件全部拷贝到了/usr/folderA......