JS宏实例:自创FS对象读取文本文件或CSV文件数据
在js宏进阶专栏中,详细的讲解了面向对象编程的一些基础知识,比如ES6类、构造函数、this指向性等等。并且详细介绍了JS宏中自带的文件系统FileSystem对象。今天,我们运用这些知识,对JS宏中的FileSystem对象进行加强与优化,开发出我们自己的文件系统FS。再利用FS来替代FileSystem对象读取或写入文件。
一、为什么要增强FileSystem
1、没有报错提示
JS宏中的FileSystem没有明确的报错,只是给一个boolean值做一个返回值,然而,在创建文件或目录时我们并不需要这样的返回值。其他高级语言中会有明确的报错提示,比如python,示例如下:
import os
os.mkdir(r'.\a\b')
如果给出详细的报错,方便我们捕获异常,随后对异常进行处理。
2、存在一些bug或方法名称不规范
比如:FileSystem.WriteFile方法,官方文档的解释是用于创建一个文件,且只有一个参数path,而实际上它有第二个参数data,就是你要写入的内容。经过测试,它不仅可以创建文件,还可以向指定文件中写入内容,而WriteFile从方法名上面来看,容易使开发者造成误解。因此文件的创建与写入方法应该分开定义。所以我们需要对他进行优化
3、缺少递归创建文件或文件夹的方法
在JS宏的文件系统中,并没有提供递归创建文件夹或文件的相关方法,因此我们需要自行编写逻辑定义。
二、优化思路
明确了JS宏中的文件系统的不足之处,我们可以针对它做一些改进。本次案例将采用ES6类的语法来定义。
1、自定义详细的报错信息
既然JS宏中缺少相关的报错信息,那么我们可以自己定义。根据JS宏进阶篇章的内容,我们可以通过继承JS自带的Error对象来定义报错信息,示例如下:
//定义报错类型FileNotFound
class FileNotFound extends Error {
constructor(message) {
super(message);
this.name = "FileNotFoundError";
}
}
//定义报错类型文件已存在
class FileExists extends Error {
constructor(message) {
super(message);
this.name = "FileExistsError";
}
}
有了我们定义的两种报错,我们就要运用到接下来的开发之中。例如:找不到文件,我们可以调用FileNotFound 来抛出异常。
2、构思优化逻辑
在这之前,我们需要定义FS对象,如下所示:
class FS {
constructor() {}
}
如果你需要节约内存,那么我们可以开启单例模式:
class FS {
static instance = null;
constructor() {
if (FS