当前位置: 首页 > 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…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的&#xff0c;可以通过集中管理和高效资源的分配&#xff0c;来支持多个独立的网站同时运行&#xff0c;让每一个网站都可以分配到独立的IP地址&#xff0c;避免出现IP关联的风险&#xff0c;用户还可以通过控制面板进行管理功…...

「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案

在移动互联网营销竞争白热化的当下&#xff0c;推客小程序系统凭借其裂变传播、精准营销等特性&#xff0c;成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径&#xff0c;助力开发者打造具有市场竞争力的营销工具。​ 一、系统核心功能架构&…...

实战三:开发网页端界面完成黑白视频转为彩色视频

​一、需求描述 设计一个简单的视频上色应用&#xff0c;用户可以通过网页界面上传黑白视频&#xff0c;系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观&#xff0c;不需要了解技术细节。 效果图 ​二、实现思路 总体思路&#xff1a; 用户通过Gradio界面上…...