当前位置: 首页 > 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宏来说,已经够用了,大家就将就将就。祝大家玩的开心。

http://www.lryc.cn/news/522042.html

相关文章:

  • XML序列化和反序列化的学习
  • npm ERR! code CERT_HAS_EXPIRED
  • 30分钟内搭建一个全能轻量级springboot 3.4 + 脚手架 <5> 5分钟集成好caffeine并使用注解操作缓存
  • 【设计模式-结构型】装饰器模式
  • 分布式数据存储基础与HDFS操作实践(副本)
  • Linux 进程前篇(冯诺依曼体系结构和操作系统)
  • Springboot Redisson 分布式锁、缓存、消息队列、布隆过滤器
  • 【C语言】_字符串拷贝函数strcpy
  • 基于 Vue 的拖拽缩放卡片组件:实现思路、方法及使用指南
  • nginx 实现 正向代理、反向代理 、SSL(证书配置)、负载均衡 、虚拟域名 ,使用其他中间件监控
  • Kafka客户端-“远程主机强迫关闭了一个现有的连接”故障排查及解决
  • Node.js - Express框架
  • AWS Lambda
  • mysql 如何快速删除表数据
  • 物联网网关Web服务器--lighttpd服务器部署与应用测试
  • vmware虚拟机配置ubuntu 18.04(20.04)静态IP地址
  • 智能家居篇 一、Win10 VM虚拟机安装 Home Assistant 手把手教学
  • Flutter插件制作、本地/远程依赖及缓存机制深入剖析(原创-附源码)
  • Python猜数小游戏
  • --- 用java实现一个计时器 ---
  • OPI4A,目标检测,口罩检测,mnn,YoloX
  • C#与Vue2上传下载Excel文件
  • Linux(Centos7)安装Mysql/Redis/MinIO
  • 港科夜闻 | 香港科大与微软亚洲研究院签署战略合作备忘录,推动医学健康教育及科研协作...
  • 森林网络部署,工业4G路由器实现林区组网远程监控
  • ASP.NET Core - 配置系统之自定义配置提供程序
  • npm、yarn、pnpm包安装器差异性对比
  • 正点原子repo放到自己的git服务器
  • [MySQL | 二、基本数据类型]
  • 工作记录小点