当前位置: 首页 > news >正文

JS宏进阶:JS宏中的文件系统FileSystem

FileSystem对象中包含文件和文件夹的一些基本和常见的操作接口。比如:判断路径是否存在、创建文件夹、创建文件、读取文件等等。他的出现可以取代文件流对txt或csv等文件的操作。官方文档网址:https://open.wps.cn/previous/docs/client/wpsLoad(可点击wps宏编辑器中的帮助进入)

一、在wps编辑器中查看FileSystem中的属性和方法

function Main(){for(let key in FileSystem){console.log("方法/属性名称:" + key + " 类型:" + typeof FileSystem[key])}
}

效果图如下所示:

官方文档说明表格如下所示:

名称说明

AppendFile

往文件末尾添加数据

copyFileSync

生成文件副本

Exists

判断一个文件和文件夹是否存在。

existsSync

判断目录是否存在

Mkdir

根据给定的path创建一个文件夹。

mkdirSync

创建目录

mkdtempSync

创建临时目录

readAsBinaryString

读取指定路径的文件,返回二进制字符串数据。

readdirSync

获取目录下的子目录对象数组(包含目录相关属性)

ReadFile

获取文件的内容

readFileString

读取指定路径的文件,返回字符串。

Remove

删除指定的path所代表的文件或文件夹。

rmdirSync

删除目录

tmpdir

获取系统的临时文件目录

unlinkSync

删除文件

writeAsBinaryString

写二进制字符串对象到指定文件。

WriteFile

创建文件

writeFileString

写字符串到指定路径的文件。

二、代替Open文件流的方法详解

1、WriteFile方法

官方文档给出的语法:express.WriteFile(FilePath)

然而如果你按照该语法调用会发现:

是的,他还有第二个参数。没办法,WPS的官方文档就是这样,不能全信,但还是要看。

他的第二个参数,data:是你要写入的内容,如果创建空文件,传入空字符串即可。

function Main(){let path = "E:\\w_js\\新建";FileSystem.WriteFile(path + "\\myText.txt", "mydata");
}

当文件不存在时,会新建文件,上述代码中:如果myText.txt文件不存在于文件夹新建中,就会新建一个名称时myText.txt的文件,并写入mydata。

当文件已经存在,执行该方法时也不会报错提示文件已经创建,而是直接向已有文件中写入数据。

所以:官方文档中对WriteFile方法的解释存在问题,它不仅可以创建文件,也可以向文件中写入数据。

此外,WriteFile方法是有返回值的,返回值是boolean值,始终是ture,没什么用。

2、writeFileString方法

官方文档给出的语法:express.writeFileString(FilePathdata)

如下图所示,该语法是正确的

然而,出乎意料的是,它的作用与WriteFile一模一样,连返回值都是一样的。好在写入内容,不会像文件流一样在文本的两端添加双引号。

3、writeAsBinaryString方法

语法与上述两个方法一致,使用方法也近乎相同。不同的是,它可以写入二进制字符串对象到指定文件。示例如下:

function Main(){let path = "E:\\w_js\\新建";const buffer = new ArrayBuffer(5);const binaryData = new Uint8Array(buffer);[72, 101, 108, 108, 111].forEach((i, index)=>{binaryData[index]=i});FileSystem.writeAsBinaryString(path + "\\my.txt", binaryData);
}

显然,上述给出的是Hello的字符串编码,效果却是Hl:

是的,稀奇古怪的bug又出现了,不过,它可以使用。你不用他写入二进制字符串对象就好了。

4、追加数据的AppendFile方法

它的语法与WriteFile一致,只不过第二个参数表示追加的数据。

function Main(){let path = "E:\\w_js\\新建\\my.txt";console.log(FileSystem.AppendFile(path, "10001"));
}

输出两次true说明执行了两次,可以看到追加了两次10001.

三、判断文件或路径是否存在

1、判断文件或文件夹是否存在的Exists方法

//判断文件夹是否存在
function Main(){let path = "E:\\w_js\\新建";console.log(FileSystem.Exists(path));
}//判断文件是否存在
function Main1(){let path = "E:\\w_js\\新建";console.log(FileSystem.Exists(path + "\\my.txt"));
}

如果存在,输出true,不存在输出false。

2、判断目录是否存在的existsSync方法

existsSync与Exists的语法结构完全一致,用法也相同,输出结果也相同。

四、目录的创建与删除

1、创建文件夹的Mkdir方法

语法与全局方法MkDir相似,但是创建不成功会输出false,也就是当你尝试使用它创建多层目录时会输出false。

function Main(){let path = "E:\\w_js\\新建\\my";console.log(FileSystem.Mkdir(path));console.log(FileSystem.Mkdir("E:\\w_js\\新建\\my1\\my\\my\\my"));
}

此外还有一个作用与Mkdir完全相同的方法mkdirSync。

2、删除目录的rmdirSync

语法与Mkdir类似,只有一个参数path。如果成功删除会输出true,没有成功删除会输出false。

function Main(){let path = "E:\\w_js\\新建\\my";console.log(FileSystem.rmdirSync(path));console.log(FileSystem.rmdirSync("E:\\w_js\\新建\\my1\\my\\my\\my"));
}

与RmDir相同,它也只能删除空目录(空文件夹),而且只能删除一层。

3、删除文件的unlinkSync

它只有一个文件路径作为他的参数。示例如下:

function Main(){console.log(FileSystem.unlinkSync("E:\\w_js\\新建\\my1.txt"));
}

如果my1.txt文件存在会输出true,表示删除成功,文件不存在会输出false。

五、文件的读取

1、ReadFile方法

function Main(){console.log(FileSystem.ReadFile("E:\\w_js\\新建\\myText.txt"));
}

注意点:它在读取文件时有可能只读取出第一个字符,或者读取乱码。下面是up操作的三个示例图:

可见,只有最后一个示例它正确无误的读取了文件中的内容。据up分析与测试,该方法可能只适用于读取通过二进制写入的文件。至于具体是什么原因造成的,up也不知道,官方文档中也没有明确的解释。

2、readFileString方法

function Main(){let path = "E:\\w_js\\新建\\myText1.txt"console.log(FileSystem.readFileString(path));console.log(FileSystem.readFileString("E:\\w_js\\新建\\my.txt"));
}

注意:该方法不适用于读取二进制文件,会导致乱码

3、readAsBinaryString方法

function Main(){let path = "E:\\w_js\\新建\\myText1.txt"console.log(FileSystem.readAsBinaryString(path));console.log(FileSystem.readAsBinaryString("E:\\w_js\\新建\\my.txt"));
}

readAsBinaryString方法官方文档有解释:用于读取指定文件,返回二进制字符串数据。事实也确实如此:

4、ReadFileAsArrayBuffer方法

function Main(){let path = "E:\\w_js\\新建\\myText1.txt"console.log(JSON.stringify(FileSystem.ReadFileAsArrayBuffer(path)));
}

很明显,它返回的是一个ArrayBuffer数据。通过处理这个数据,最终可以获取文件中的内容。

六、总结

虽然该对象中的某些方法存在一些bug,但总的来说,操作文本文件或者csv文件,比文件流好用许多。对于JS宏来说,已经够用了,大家就将就将就。祝大家玩的开心。

相关文章:

JS宏进阶:JS宏中的文件系统FileSystem

FileSystem对象中包含文件和文件夹的一些基本和常见的操作接口。比如:判断路径是否存在、创建文件夹、创建文件、读取文件等等。他的出现可以取代文件流对txt或csv等文件的操作。官方文档网址:https://open.wps.cn/previous/docs/client/wpsLoad&#xf…...

XML序列化和反序列化的学习

1、基本介绍 在工作中,经常为了调通上游接口,从而对请求第三方的参数进行XML序列化,这里常使用的方式就是使用JAVA扩展包中的相关注解和类来实现xml的序列化和反序列化。 2、自定义工具类 import javax.xml.bind.JAXBContext; import javax.x…...

npm ERR! code CERT_HAS_EXPIRED

很不幸看到这个提示。 查了很多网上的解决方案,都提到一个解决方案: npm install -g npmlatest 靠就是执行install报的错,你要我通过install来解决这个问题。可见大多数人都是转发,从不自己试试。 第二个是看系统时间。这个基…...

30分钟内搭建一个全能轻量级springboot 3.4 + 脚手架 <5> 5分钟集成好caffeine并使用注解操作缓存

快速导航 <1> 5分钟快速创建一个springboot web项目 <2> 5分钟集成好最新版本的开源swagger ui&#xff0c;并使用ui操作调用接口 <3> 5分钟集成好druid并使用druid自带监控工具监控sql请求 <4> 5分钟集成好mybatisplus并使用mybatisplus generator自…...

【设计模式-结构型】装饰器模式

一、什么是装饰器模式 装饰器模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;它的核心思想是在不改变原有对象结构的情况下&#xff0c;动态地给对象增加一些功能&#xff0c;从而达到扩展功能的目的。举个例子&#xff0c;今天在家妈妈给蒸馒…...

分布式数据存储基础与HDFS操作实践(副本)

以下为作者本人撰写的报告&#xff0c;步骤略有繁琐&#xff0c;不建议作为参考内容&#xff0c;可以适当浏览&#xff0c;进一步理解。 一、实验目的 1、理解分布式文件系统的基本概念和工作原理。 2、掌握Hadoop分布式文件系统&#xff08;HDFS&#xff09;的基本操作。 …...

Linux 进程前篇(冯诺依曼体系结构和操作系统)

目录 一.冯诺依曼体系结构 1.概念 2.硬件层面的数据流 3.总结加补充 二.操作系统 (Operating System) 1.概念 2.设计OS的目的 3.定位 4.操作系统的管理 5.计算机体系的层状结构 在我们认识进程之前&#xff0c;我们先了解什么是冯诺依曼体系结构 一.冯诺依曼体系结构…...

Springboot Redisson 分布式锁、缓存、消息队列、布隆过滤器

redisson-spring-boot-starter 是 Redisson 提供的 Spring Boot 集成包&#xff0c;旨在简化与 Redis 的交互&#xff0c;包括分布式锁、缓存、消息队列、布隆过滤器等功能的实现。 Maven 依赖 在 Spring Boot 项目中添加 redisson-spring-boot-starter 依赖&#xff1a; <…...

【C语言】_字符串拷贝函数strcpy

目录 1. 函数声明及功能 2. 使用示例 3. 注意事项 4. 模拟实现 4.1 第一版&#xff1a;基本功能判空const修饰 4.2 第二版&#xff1a;优化对于\0的单独拷贝 4.3 第三版&#xff1a;仿strcpy的char*返回值 1. 函数声明及功能 char * strcpy ( char * destination, cons…...

基于 Vue 的拖拽缩放卡片组件:实现思路、方法及使用指南

引言 在前端开发中&#xff0c;实现可交互的组件能够极大地提升用户体验。本文将介绍一个基于 Vue 封装的可缩放卡片组件&#xff0c;从实现思路、代码具体实现以及使用方法等方面进行详细阐述&#xff0c;帮助开发者更好地理解和运用这一组件。项目源码地址&#xff1a;https…...

nginx 实现 正向代理、反向代理 、SSL(证书配置)、负载均衡 、虚拟域名 ,使用其他中间件监控

我们可以详细地配置 Nginx 来实现正向代理、反向代理、SSL、负载均衡和虚拟域名。同时&#xff0c;我会介绍如何使用一些中间件来监控 Nginx 的状态和性能。 1. 安装 Nginx 如果你还没有安装 Nginx&#xff0c;可以通过以下命令进行安装&#xff08;以 Ubuntu 为例&#xff0…...

Kafka客户端-“远程主机强迫关闭了一个现有的连接”故障排查及解决

Kafka客户端-“远程主机强迫关闭了一个现有的连接”故障排查及解决 1. 故障现象 Kafka客户端发送数据时&#xff0c;出现“远程主机强迫关闭了一个现有的连接”错误&#xff0c;导致数据发送失败。错误信息如下&#xff1a; 2. 故障排查 【1】. 查看服务网络状态 出现故障…...

Node.js - Express框架

1. 介绍 Express 是一个基于 Node.js 的 Web 应用程序框架&#xff0c;主要用于快速、简便地构建 Web 应用程序 和 API。它是目前最流行的 Node.js Web 框架之一&#xff0c;具有轻量级、灵活和功能丰富的特点。 核心概念包括路由&#xff0c;中间件&#xff0c;请求与响应&a…...

AWS Lambda

AWS Lambda 是 Amazon Web Services&#xff08;AWS&#xff09;提供的无服务器计算服务&#xff0c;它让开发者能够运行代码而不需要管理服务器或基础设施。AWS Lambda 会自动处理代码的执行、扩展和计费&#xff0c;开发者只需关注编写和部署代码&#xff0c;而无需担心底层硬…...

mysql 如何快速删除表数据

在数据库管理中, 经常会遇到需要删除大量数据的情况. 对于 MySQL 数据库而言, 如何高效快速地删除数据是一个值得深入探讨的问题. 本文将详细介绍几种在 MySQL 中快速删除数据的方法及相关注意事项. delete 语句 delete 语句可以删除符合条件的指定数据, 但是在删除大量数据…...

物联网网关Web服务器--lighttpd服务器部署与应用测试

以下是在国产ARM处理器E2000飞腾派开发板上部署 lighttpd 并进行 CGI 应用开发的步骤&#xff1a; 1、lighttpd简介 Lighttpd 是一款轻量级的开源 Web 服务器软件&#xff0c;具有以下特点和功能&#xff1a; 特点 轻量级&#xff1a;Lighttpd 在设计上注重轻量级和高效性&a…...

vmware虚拟机配置ubuntu 18.04(20.04)静态IP地址

VMware版本 &#xff1a;VMware Workstation 17 Pro ubuntu版本&#xff1a;ubuntu-18.04.4-desktop-amd64 主机环境 win11 1. 修改 VMware虚拟网络编辑器 打开vmware&#xff0c;点击顶部的“编辑"菜单&#xff0c;打开 ”虚拟化网络编辑器“ 。 选择更改设置&#…...

智能家居篇 一、Win10 VM虚拟机安装 Home Assistant 手把手教学

智能家居篇 一、Win10 VM虚拟机安装 Home Assistant 手把手教学 文章目录 [智能家居篇]( )一、Win10 VM虚拟机安装 Home Assistant 手把手教学 前言一.下载Vm版本的HomeAsistant安装包 二.打开Vmware选择新建虚拟机1.选择自定义高级2.选择16.x及以上3.选择稍后安装4.根据官网的…...

Flutter插件制作、本地/远程依赖及缓存机制深入剖析(原创-附源码)

Flutter插件在开发Flutter项目的过程中扮演着重要的角色&#xff0c;我们从 ​​​​​​https://pub.dev 上下载添加到项目中的第三方库都是以包或者插件的形式引入到代码中的&#xff0c;这些第三方工具极大的提高了开发效率。 深入的了解插件的制作、发布、工作原理和缓存机…...

Python猜数小游戏

Python 实现的《猜数游戏》 介绍 本文将展示如何使用 Python 编写一个简单的《猜数游戏》。这个游戏将会生成一个1到10之间的随机数&#xff0c;用户有最多三次机会来猜测正确的数字。如果用户猜对了&#xff0c;游戏将结束并显示恭喜信息&#xff1b;如果没有猜对&#xff0…...

--- 用java实现一个计时器 ---

这里的计时器值得是当线程设定的时间过了之后&#xff0c;自动执行该线程的工作 设计 MyTimer 既然是要在指定的时间之后执行任务&#xff0c;那么传入的参数就应该有run方法&#xff08;需要执行的任务&#xff09;&#xff0c;time&#xff08;在多少时间之后执行&#xff…...

OPI4A,目标检测,口罩检测,mnn,YoloX

记得之前&#xff0c;使用了bubbling导师复现的python版yolox&#xff0c;训练了自建的口罩数据集&#xff0c;得到了h5文件&#xff0c;又转换成pb文件&#xff0c;再使用阿里巴巴的MNN&#xff0c;使用它的MNNConvert&#xff0c;转换成mnn文件 最终实现了&#xff0c;在树莓…...

C#与Vue2上传下载Excel文件

1、上传文件流程&#xff1a;先上传文件&#xff0c;上传成功&#xff0c;返回文件名与url&#xff0c;然后再次发起请求保存文件名和url到数据库 前端Vue2代码&#xff1a; 使用element的el-upload组件&#xff0c;action值为后端接收文件接口&#xff0c;headers携带session信…...

Linux(Centos7)安装Mysql/Redis/MinIO

安装Mysql 安装Redis 搜索Redis最先版本所在的在线安装yum库 查看以上两个组件是否是开机自启 安装MinIO 开源的对象存储服务&#xff0c;存储非结构化数据&#xff0c;兼容亚马逊S3协议。 minio --help #查询命令帮助minio --server --help #查询--server帮助minio serve…...

港科夜闻 | 香港科大与微软亚洲研究院签署战略合作备忘录,推动医学健康教育及科研协作...

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大与微软亚洲研究院签署战略合作备忘录&#xff0c;推动医学健康教育及科研协作。根据备忘录&#xff0c;双方将结合各自于科研领域的优势&#xff0c;携手推动医学健康领域的交流与合作。合作方向将涵盖人才培训、…...

森林网络部署,工业4G路由器实现林区组网远程监控

在广袤无垠的林区&#xff0c;每一片树叶的摇曳、每一丝空气的流动&#xff0c;都关乎着生态的平衡与安宁。林区监控正以强大的力量&#xff0c;为这片绿色家园筑起一道坚固的防线。 工业 4G 路由器作为林区监控组网的守护者&#xff0c;凭借着卓越的通讯性能&#xff0c;突破…...

ASP.NET Core - 配置系统之自定义配置提供程序

ASP.NET Core - 配置系统之自定义配置提供程序 4. 自定义配置提供程序IConfigurationSourceIConfigurationProvider 4. 自定义配置提供程序 在 .NET Core 配置系统中封装一个配置提供程序关键在于提供相应的 IconfigurationSource 实现和 IConfigurationProvider 接口实现&…...

npm、yarn、pnpm包安装器差异性对比

特性npmyarnpnpm发布年份2010 年发布2016 年发布2017 年发布安装速度较慢&#xff08;旧版本&#xff09;&#xff0c;但自 npm 5 后有所改善较快&#xff0c;尤其是在缓存方面极快&#xff0c;使用硬链接和全局缓存来提高速度包管理模式扁平化依赖&#xff0c;可能会发生重复依…...

正点原子repo放到自己的git服务器

atk-rk3568_android11 导出project-objects对应仓库 .repo/repo/repo list -n > project-object.txt将project-object.txt格式化&#xff0c;并通过gitolite.conf创建对应仓库 atk-rk3568_android11_repo atk-rk3568_android11/RKTools atk-rk3568_android11_repo atk-…...

[MySQL | 二、基本数据类型]

基本数据类型 一、数值类型举例表结构1. 整数类型zerofill属性 与 int(n) 中 n 的关系 2.bit类型3. 小数类型float类型decimal类型 二、字符串类型1. char2. varchar如何选择定长或变长字符串&#xff1f; 3. 日期时间类型(date datetime timestamp)4. enum枚举类型5. set多选类…...