Auto.Js 第四章:数据处理,文件与储存

本教程详细介绍了Auto.Js中数据的获取、使用和储存,包括内部数据、外部数据、本地存储(Storages)以及文件系统操作。通过实例展示了如何使用storages模块进行数据存储和查询,以及如何读取和保存文件。此外,还讲解了如何通过网络获取数据并将其保存到文件中。
部署运行你感兴趣的模型镜像

教程基于Auto.js 4.0.1版本

目标:数据的获取、使用及储存

  1. 数据使用
  2. 数据储存
  3. 数据获取、传输

数据使用

将获取到的数据拿去做了事,就是对数据进行了使用。以下例子均为对数据的使用。

很简单的使用方式:
log(数据)
将数据打印输出到控制台。
if(数据)
判断是否存在数据,数据不为false、undefined、null的情况。


数据储存

就是将数据保存到以后可以再次获取的地方。也是数据使用的一种。
储存可以当做是修改代码的作用域范围。

作用域举列:小明能呼吸空气(数据),“空气"这个’量’是在小明的"可操作范围”(作用域)内,小明“现在”不能呼吸到氨气(数据),是因为氨气“现在”不在小明的可操作范围(作用域)内。
简单来讲:空气在不在小明的范围内,就决定了小明能不能使用空气。

储存举例: 小红在存在氨气(数据)的地方,用保鲜袋装了一代氨气,之后拿给小明。“现在”小明打开袋子,氨气在小明的范围内,小明成功的吸到了氨气。
简单来讲:储存就是将数据的作用域进行了修改。

常见的储存方式:
保存到文件
files.write(path, text[, encoding = "utf-8"])
将数据写到文件上进行储存。注意:文件只能保存字符串。在’程序’方面,文件的本质是只记录数字的。通过字符集转成的字符串。日常用得最多的也是保存字符串。
代码:

// 在手机的 /sdcard/脚本/ 目录下创建一个文件1.txt,并在文件里面写上"文件内容"4个字
files.write("/sdcard/脚本/1.txt", "文件内容");

结果:
运行前:在这里插入图片描述
运行后:在这里插入图片描述
在这里插入图片描述

函数:

files.write(path, text[, encoding = "utf-8"])#
path <string> 路径
text <string> 要写入的文本内容
encoding <string> 字符编码
把text写入到文件path中。如果文件存在则覆盖,不存在则创建。

Storages - 本地存储

storages模块提供了保存简单数据、用户配置等的支持。保存的数据除非应用被卸载或者被主动删除,否则会一直保留。

本地储存就像是一本记事本(笔记本)。每一页是一个Storage对象(注意没有s后缀)。每一页都是可以无限扩充的,取决于设备(手机)的储存大小。每一页的页码换成了一个名字。想要拿到第几页就跟他说名字即可。没有加密,所有脚本都可以访问任意Storage对象。

使用方式:
通过storages(有s后缀,而且是小写)获取一个Storage对象,也就是获取一页纸。在获取的时候会创建,如果已经有了,那么就是获取。如果没有,就是创建。
代码:

log(storages.create("测试"));

结果:在这里插入图片描述
对Storage对象进行增删操作:
增加:添加是键值对添加。简单来说:就是这一页纸的第几行,就是这一行写的数据。
删除:通过键来删除。简单来说:,这一行把他给擦掉。
修改:重新增加即可达到修改操作。
查询:通过键来查询。简单来说:就是拿到这一行写的数据。
代码:

// 获取一个 Storage对象
let s = storages.create("测试");
// 添加操作,在"k1"这一行写了"v1"
s.put("k1","v1");
// 查询操作,拿到"k1"这一行的数据并且打印出来
log(s.get("k1"));
// 删除操作,删除"k1"这一行
s.remove("k1");
// 查询操作,此时再去查看,数据已经没有了
log(s.get("k1"));
// 删除操作,删除当前这一页纸
storages.remove("测试");

结果:在这里插入图片描述

函数

storages.create(name)
name <string> 本地存储名称
创建一个本地存储并返回一个Storage对象。不同名称的本地存储的数据是隔开的,而相同名称的本地存储的数据是共享的。

storages.remove(name)
name <string> 本地存储名称
删除一个本地存储以及他的全部数据。如果该存储不存在,返回false;否则返回true。


Storage.get(key[, defaultValue])#
key <string> 键值
defaultValue <any> 可选,默认值
从本地存储中取出键值为key的数据并返回。
如果该存储中不包含该数据,这时若指定了默认值参数则返回默认值,否则返回undefined。
返回的数据可能是任意数据类型,这取决于使用Storage.put保存该键值的数据时的数据类型。

Storage.put(key, value)#
key <string> 键值
value <any> 值
把值value保存到本地存储中。value可以是undefined以外的任意数据类型。如果value为undefined则抛出TypeError。
存储的过程实际上是使用JSON.stringify把value转换为字符串再保存,因此value必须是可JSON化的才能被接受。

Storage.remove(key)
key <string> 键值
移除键值为key的数据。不返回任何值。

保存到服务器
这里以get请求为例,向百度发出一个搜索请求。百度的服务器能收到我们发送的数据"abc",所以才会将他的处理结果给我们。我们可以向指定的服务器发送数据,服务器可以进行保存。
代码:

// 发出请求并获取到返回的数据。请求链接使用的二级域名是wap,数据会稍微多一点。
let re = http.get("http://wap.baidu.com/s?word=abc");
// 打印本次请求的返回状态码
log(re.statusCode)
// 打印本次请求到的数据的长度。由于返回的数据过多,直接打印会卡死。
log(re.body.string().length)

结果
在这里插入图片描述

函数:

http.get(url[, options, callback])
url <string> 请求的URL地址,需要以"http://""https://"开头。如果url没有以"http://"开头,则默认为"http://"。
options <Object> 请求选项。参见[http.request()][]。
callback <Function> 回调函数,可选,其参数是一个[Response][]对象。如果不加回调函数,则该请求将阻塞、同步地执行。
对地址url进行一次HTTP GET 请求。如果没有回调函数,则在请求完成或失败时返回此次请求的响应(参见[Response][])

数据获取

数据:一个数字、一句话、一个对象、一个异常等等等等,都是数据。

我将数据获取的方式分为两种:内部数据外部数据

内部数据:

脚本程序自己创建产生的数据(例如:变量)。

创造数据、使用数据、数据范围的例子
代码:

// 创造数据:创建了一个变量a,值为10。这就是脚本自己创建的数据。
var a = 10;
// 数据使用:由于代码块在当前范围内,数据a也在范围内,所以代码块里面可以使用数据a
{
	log("a", a);
	// 创建数据:创建全局变量,这个全局是指当前js文件内。
	var b = 20;
	// 创造数据:创建局部变量b,由于是局部范围,在代码块之外将无法使用。
	let c = 30;
}
// 使用数据:打印输出 b、c
log("b", b);	// 正常使用
log("c", c);	// 会出现 变量c未定义错误

结果:
在这里插入图片描述

数据储存,将创建的变量c使用外部的“储存器”(比如变量)给保存起来即可。
代码:

// 创建一个变量d用于储存c
var d;
var a = 10;
{
	log("a", a);
	var b = 20;
	let c = 30;
	d = c;	// 将c的数据赋值给d,也就相当于复制了一份出去。
}
log("b", b);
// log("c", c);	// 这里变量c还是一样未定义
log("d", d);	// 变量d的内容就是变量c的内容

结果:
在这里插入图片描述

函数:

console.log([data][, ...args])
data <any>
...args <any>
打印到控制台,并带上换行符。 可以传入多个参数,第一个参数作为主要信息,其他参数作为类似于 printf(3) 中的代替值(参数都会传给 util.format())。

const count = 5;
console.log('count: %d', count);
// 打印: count: 5 到 stdout
console.log('count:', count);
// 打印: count: 5 到 stdout
详见 util.format()。

该函数也可以作为全局函数使用。
外部数据:

不是脚本自己创造出来的数据均称为外部数据。
从外部获取到的数据我又将其分成两种:主动数据、被动数据

主动数据: 脚本主动去获取的数据。响应时间快,因为是主动去获取的。
被动数据: 脚本开启监听,被动获取的数据。响应时间不稳定,不能确定什么时间会出现数据。

主动数据:
files.read(path)
读取指定文件获取文件的内容(数据)。
http.get(url)
通过网络获取一个网页的内容(数据)。

被动数据:
events.observeNotification()
监听通知信息(数据)。
ui.id.click(fun)
监听ui界面中指定id的控件的点击操作(信息),当出现点击操作时会执行函数 fun。


整合例子:从百度搜索"soso",然后将搜索到的数据保存到文件"soso.html"文件中。
代码:

// 定义要搜索的内容
let soso = "soso";	// 可以修改成想要搜索的内容,可以改成 input,让用户自行输入
// 拼接字符串并进行搜索
let re = http.get("http://wap.baidu.com/s?word="+soso);

// 打印本次请求的返回状态码
log(re.statusCode);
// 使用一个变量来保存请求到的数据。多此一举的原因是因为"re.body.string()"只能用一次。
let data = re.body.string()
// 打印本次请求到的数据的长度。由于返回的数据过多,直接打印会卡死。
log(data.length);
// 拼接文件路径,使用files.join的原因是在忘记输入斜杠/时会自动加上。
let path = files.join("/sdcard/脚本/", soso+".html");
log(path);
// 将本次内容写到文件中
files.write(path, data);

结果:
代码运行结束
在这里插入图片描述
文件创建成功
在这里插入图片描述
网页数据已经保存到文件中
在这里插入图片描述

使用html查看器来查看
在这里插入图片描述
已经是在搜索界面
在这里插入图片描述

函数列表:

Storages - 本地存储
函数名功能参数返回值
storages.create(name)创建一个本地存储并返回一个Storage对象。不同名称的本地存储的数据是隔开的,而相同名称的本地存储的数据是共享的。stringStorage
storages.remove(name)删除一个本地存储以及他的全部数据。如果该存储不存在,返回false;否则返回true。stringboolean
-Storage-
get(key[, defaultValue])从本地存储中取出键值为key的数据并返回。如果该存储中不包含该数据,这时若指定了默认值参数则返回默认值,否则返回undefined。返回的数据可能是任意数据类型,这取决于使用Storage.put保存该键值的数据时的数据类型。stringany(自动解析,也就是多种类型)
put(key, value)把值value保存到本地存储中。value可以是undefined以外的任意数据类型。如果value为undefined则抛出TypeError。存储的过程实际上是使用JSON.stringify把value转换为字符串再保存,因此value必须是可JSON化的才能被接受。stringstring(或者可JSON化的对象)
remove(key)移除键值为key的数据。不返回任何值。string-
contains(key)返回该本地存储是否包含键值为key的数据。是则返回true,否则返回false。stringboolean
clear()移除该本地存储的所有数据。不返回任何值。--
Files - 文件系统
函数名功能参数返回值
注意!!!需要使用 files 来调用。例子:files.isFile(“1”)
isFile(path)返回路径path是否是文件stringboolean
isDir(path)返回路径path是否是文件夹stringboolean
isEmptyDir(path)返回文件夹path是否为空文件夹。如果该路径并非文件夹,则直接返回falsestringboolean
join(parent, child)连接两个路径并返回,例如files.join("/sdcard/", “1.txt”)返回"/sdcard/1.txt"。string,stringstring
create(path)创建一个文件或文件夹并返回是否创建成功。如果文件已经存在,则直接返回false。stringboolean
createWithDirs(path)创建一个文件或文件夹并返回是否创建成功。如果文件所在文件夹不存在,则先创建他所在的一系列文件夹。如果文件已经存在,则直接返回false。stringboolean
exists(path)判断在路径path处的文件是否存在
ensureDir(path)确保路径path所在的文件夹存在。如果该路径所在文件夹不存在,则创建该文件夹。stringboolean
read(path[, encoding = “utf-8”])读取文本文件path的所有内容并返回。如果文件不存在,则抛出FileNotFoundException。string,stringstring
readBytes(path)读取文件path的所有内容并返回一个字节数组。如果文件不存在,则抛出FileNotFoundException。stringbyte[]
write(path, text[, encoding = “utf-8”])把text写入到文件path中。如果文件存在则覆盖,不存在则创建。string,string,string-
writeBytes(path, bytes)把bytes(字节数组)写入到文件path中。如果文件存在则覆盖,不存在则创建。string,byte[]-
append(path, text[, encoding = ‘utf-8’])把text追加到文件path的末尾。如果文件不存在则创建。string,string,string-
appendBytes(path, text[, encoding = ‘utf-8’])把bytes追加到文件path的末尾。如果文件不存在则创建。string,byte[]-
copy(fromPath, toPath)复制文件,将路径fromPath的文件复制到toPath路径string,stringboolean
move(fromPath, toPath)移动文件,将路径fromPath的文件复制到toPath路径string,stringboolean
rename(path, newName)重命名文件,并返回是否重命名成功。path是一个路径,不仅仅是文件名。string,stringboolean
renameWithoutExtension(path, newName)重命名文件,不包含拓展名,并返回是否重命名成功。例如files.rename("/sdcard/1.txt", “2”)会把"1.txt"重命名为"2.txt"。string,stringboolean
getName(path)返回文件的文件名。例如files.getName("/sdcard/1.txt")返回"1.txt"。stringstring
getNameWithoutExtension(path)返回不含拓展名的文件的文件名。例如files.getName("/sdcard/1.txt")返回"1"。stringstring
getExtension(path)返回文件的拓展名。例如files.getExtension("/sdcard/1.txt")返回"txt"。stringstring
remove(path)删除文件或空文件夹,返回是否删除成功。stringboolean
removeDir(path)删除文件夹,如果文件夹不为空,则删除该文件夹的所有内容再删除该文件夹,返回是否全部删除成功。stringboolean
getSdcardPath()返回SD卡路径。所谓SD卡,即外部存储器。现在通常获取到的是"/storage/emulated/o","/sdcard"和他功能相同,内部会自动处理。-string
cwd()返回脚本的"当前工作文件夹路径"。该路径指的是,如果脚本本身为脚本文件,则返回这个脚本文件所在目录;否则返回null获取其他设定路径。-string
path(relativePath)返回相对路径对应的绝对路径。例如files.path("./1.png"),如果运行这个语句的脚本位于文件夹"/sdcard/脚本/“中,则返回”/sdcard/脚本/1.png"。stringstring
listDir(path[, filter])列出文件夹path下的满足条件的文件和文件夹的名称的数组。如果不加filter参数,则返回所有文件和文件夹。string,functionarray

open(path[, mode = "r", encoding = "utf-8", bufferSize = 8192])

path \<string> 文件路径,例如"/sdcard/1.txt"。
mode \<string> 文件打开模式,包括:
"r": 只读文本模式。该模式下只能对文件执行文本读取操作。
"w": 只写文本模式。该模式下只能对文件执行文本覆盖写入操作。
"a": 附加文本模式。该模式下将会把写入的文本附加到文件末尾。
"rw": 随机读写文本模式。该模式下将会把写入的文本附加到文件末尾。
目前暂不支持二进制模式,随机读写模式。
encoding <string> 字符编码。
bufferSize <number> 文件读写的缓冲区大小。
打开一个文件。根据打开模式返回不同的文件对象。包括:

"r": 返回一个ReadableTextFile对象。
"w", "a": 返回一个WritableTextFile对象。
对于"w"模式,如果文件并不存在,则会创建一个,已存在则会清空该文件内容;
其他模式文件不存在会抛出FileNotFoundException。

ReadableTextFile 可读文件对象(以下简称Re)。
PWritableTextFile 可写文件对象(以下简称Pw)。

函数功能参数返回值
注意!!!打开一个文件写入后,不再使用时务必关闭,否则文件可能会丢失!
Re.read()返回该文件剩余的所有内容的字符串。-string
Re.read(maxCount)读取该文件接下来最长为maxCount的字符串并返回。即使文件剩余内容不足maxCount也不会出错。numberstring
Re.readline()读取一行并返回(不包含换行符)。-string
Re.readlines()读取剩余的所有行,并返回它们按顺序组成的字符串数组。-array
Re.close()关闭该文件。-
Pw.close()关闭文件。同时会被缓冲区内容输出到文件。-
Pw.write(text)把文本内容text写入到文件中。string
Pw.writeline(line)把文本line写入到文件中并写入一个换行符。string
Pw.writelines(lines)把很多行写入到文件中。array
Pw.flush()把缓冲区内容输出到文件中。-

您可能感兴趣的与本文相关的镜像

Anything-LLM

Anything-LLM

AI应用

AnythingLLM是一个全栈应用程序,可以使用商用或开源的LLM/嵌入器/语义向量数据库模型,帮助用户在本地或云端搭建个性化的聊天机器人系统,且无需复杂设置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值