IOS苹果脚本TXT文件读写H5日志打印完整示例
IOS苹果脚本TXT文件读写H5日志打印完整示例// iOS TXT文件读写完整示例
// 展示多种读取和保存TXT文件的方法
// 与 H5 界面集成,通过 LogBridge 输出日志
// ============================================
// 基础文件路径(iOS系统路径)
// ============================================
const basePath = project.getResourcesPath() + "/";
const testFile = basePath + "test.txt";
const dataFile = basePath + "data.txt";
const logFile = basePath + "log.txt";
const jsonFile = basePath + "config.json";
// ============================================
// 示例1: 基础写入和读取
// ============================================
function basicReadWrite() {
printl("=== 示例1: 基础写入和读取 ===");
// 写入文本(覆盖模式,false表示覆盖)
txt.writeFile(testFile, "Hello AIWROK!\n这是第一行\n这是第二行", false);
printl("✓ 写入成功");
// 读取文本
let content = txt.readFile(testFile);
if (content && content.length > 0) {
printl("✓ 读取成功,内容长度: " + content.length + " 字符");
printl("读取内容:\n" + content);
} else {
printl("✗ 读取失败或内容为空");
}
return content;
}
// ============================================
// 示例2: 追加模式写入
// ============================================
function appendMode() {
printl("\n=== 示例2: 追加模式写入 ===");
// 先写入初始内容(覆盖模式)
txt.writeFile(logFile, "日志开始\n", false);
printl("✓ 初始日志已写入");
// 追加多条日志(第三个参数true表示追加)
txt.writeFile(logFile, "2024-01-01 第一条日志\n", true);
txt.writeFile(logFile, "2024-01-02 第二条日志\n", true);
txt.writeFile(logFile, "2024-01-03 第三条日志\n", true);
printl("✓ 追加3条日志成功");
// 读取全部日志
let logs = txt.readFile(logFile);
if (logs && logs.length > 0) {
printl("✓ 读取成功,日志总长度: " + logs.length + " 字符");
printl("日志内容:\n" + logs);
} else {
printl(" 读取失败或日志为空");
}
return logs;
}
// ============================================
// 示例3: 覆盖模式写入
// ============================================
function overwriteMode() {
printl("\n=== 示例3: 覆盖模式写入 ===");
// 第一次写入
txt.writeFile(dataFile, "原始数据", false);
let firstRead = txt.readFile(dataFile);
printl("✓ 第一次写入成功,读取结果: " + firstRead);
// 覆盖写入
txt.writeFile(dataFile, "新数据覆盖了旧数据", false);
let secondRead = txt.readFile(dataFile);
printl("✓ 覆盖写入成功,读取结果: " + secondRead);
return txt.readFile(dataFile);
}
// ============================================
// 示例4: 读取并处理多行文本
// ============================================
function processMultiLine() {
printl("\n=== 示例4: 读取并处理多行文本 ===");
// 创建多行数据(覆盖模式)
let multiLineData = "姓名,年龄,城市\n张三,25,北京\n李四,30,上海\n王五,28,广州";
txt.writeFile(dataFile, multiLineData, false);
printl("✓ CSV数据写入成功");
// 读取并分割行
let content = txt.readFile(dataFile);
if (!content || content.length === 0) {
printl("✗ 读取失败");
return [];
}
printl("✓ 读取成功,内容长度: " + content.length + " 字符");
let lines = content.split("\n");
printl("总行数: " + lines.length);
for (let i = 0; i < lines.length; i++) {
printl("第" + (i+1) + "行: " + lines);
}
// 解析CSV格式
if (lines.length > 1) {
let headers = lines.split(",");
printl("表头: " + headers.join(" | "));
for (let i = 1; i < lines.length; i++) {
let fields = lines.split(",");
if (fields.length >= 3) {
printl("记录: 姓名=" + fields + ", 年龄=" + fields + ", 城市=" + fields);
}
}
}
return lines;
}
// ============================================
// 示例5: JSON数据存储和读取
// ============================================
function jsonStorage() {
printl("\n=== 示例5: JSON数据存储和读取 ===");
// 创建配置对象
let config = {
username: "admin",
password: "123456",
settings: {
theme: "dark",
language: "zh-CN",
autoSave: true
},
lastLogin: new Date().getTime()
};
// 转换为JSON字符串并保存(覆盖模式)
let jsonString = JSON.stringify(config, null, 2);
txt.writeFile(jsonFile, jsonString, false);
printl("✓ JSON配置已保存到: " + jsonFile);
// 读取并解析JSON
let savedJson = txt.readFile(jsonFile);
if (!savedJson || savedJson.length === 0) {
printl("✗ 读取失败");
return null;
}
printl("✓ 读取成功,JSON长度: " + savedJson.length + " 字符");
try {
let parsedConfig = JSON.parse(savedJson);
printl("✓ JSON解析成功");
printl("用户名: " + parsedConfig.username);
printl("主题: " + parsedConfig.settings.theme);
printl("语言: " + parsedConfig.settings.language);
printl("自动保存: " + parsedConfig.settings.autoSave);
return parsedConfig;
} catch (e) {
printl("✗ JSON解析失败: " + e);
printl("原始内容: " + savedJson);
return null;
}
}
// ============================================
// 示例6: 列表数据存储
// ============================================
function listStorage() {
printl("\n=== 示例6: 列表数据存储 ===");
// 保存任务列表
let tasks = [
"完成项目文档",
"修复bug #123",
"代码审查",
"部署到生产环境"
];
// 每行一个任务(覆盖模式)
let taskContent = tasks.join("\n");
txt.writeFile(basePath + "tasks.txt", taskContent, false);
printl("✓ 任务列表已保存,共" + tasks.length + "个任务");
// 读取任务列表
let savedTasks = txt.readFile(basePath + "tasks.txt");
if (!savedTasks || savedTasks.length === 0) {
printl("✗ 读取失败");
return [];
}
printl("✓ 读取成功");
let taskArray = savedTasks.split("\n").filter(function(t) { return t.trim() !== ""; });
printl("读取到的任务:");
for (let i = 0; i < taskArray.length; i++) {
printl("" + (i+1) + ". " + taskArray);
}
return taskArray;
}
// ============================================
// 示例7: 键值对配置存储
// ============================================
function keyValueStorage() {
printl("\n=== 示例7: 键值对配置存储 ===");
// 保存键值对配置
let configMap = {
"server_url": "https://api.example.com",
"timeout": "30000",
"retry_count": "3",
"debug_mode": "false"
};
// 格式: key=value(覆盖模式)
let configLines = [];
for (let key in configMap) {
configLines.push(key + "=" + configMap);
}
txt.writeFile(basePath + "settings.ini", configLines.join("\n"), false);
printl("✓ 配置已保存到: " + basePath + "settings.ini");
// 读取并解析配置
let configContent = txt.readFile(basePath + "settings.ini");
if (!configContent || configContent.length === 0) {
printl("✗ 读取失败");
return {};
}
printl("✓ 读取成功");
let configLines_read = configContent.split("\n");
let parsedConfig = {};
for (let i = 0; i < configLines_read.length; i++) {
let line = configLines_read.trim();
if (line && line.indexOf("=") > -1) {
let parts = line.split("=");
if (parts.length >= 2) {
let key = parts.trim();
let value = parts.slice(1).join("=").trim();
parsedConfig = value;
}
}
}
printl("解析的配置:");
for (let key in parsedConfig) {
printl("" + key + " = " + parsedConfig);
}
return parsedConfig;
}
// ============================================
// 示例8: 大文件分块读写
// ============================================
function chunkedReadWrite() {
printl("\n=== 示例8: 大文件分块读写 ===");
// 生成大量数据
let largeData = "";
for (let i = 1; i <= 100; i++) {
largeData += "第" + i + "行数据: Lorem ipsum dolor sit amet\n";
}
// 写入大文件(覆盖模式)
txt.writeFile(basePath + "large.txt", largeData, false);
printl("✓ 大文件已写入,共100行");
// 读取并统计
let content = txt.readFile(basePath + "large.txt");
if (!content || content.length === 0) {
printl("✗ 读取失败");
return 0;
}
printl("✓ 读取成功");
let lines = content.split("\n").filter(function(l) { return l.trim() !== ""; });
printl("读取到 " + lines.length + " 行数据");
// 显示前5行和后5行
printl("前5行:");
for (let i = 0; i < Math.min(5, lines.length); i++) {
printl("" + lines);
}
printl("后5行:");
for (let i = Math.max(0, lines.length - 5); i < lines.length; i++) {
printl("" + lines);
}
return lines.length;
}
// ============================================
// 示例9: 带时间戳的日志系统
// ============================================
function timestampLog() {
printl("\n=== 示例9: 带时间戳的日志系统 ===");
let logFile2 = basePath + "timestamp_log.txt";
// 写入带时间戳的日志
function addLog(message) {
let now = new Date();
let timestamp = now.getFullYear() + "-" +
String(now.getMonth() + 1).padStart(2, '0') + "-" +
String(now.getDate()).padStart(2, '0') + " " +
String(now.getHours()).padStart(2, '0') + ":" +
String(now.getMinutes()).padStart(2, '0') + ":" +
String(now.getSeconds()).padStart(2, '0');
txt.writeFile(logFile2, "[" + timestamp + "] " + message + "\n", true);
}
// 添加多条日志
addLog("系统启动");
addLog("加载配置完成");
addLog("连接数据库成功");
addLog("开始处理任务");
addLog("任务处理完成");
printl("✓ 5条日志已写入");
// 读取所有日志
let logs = txt.readFile(logFile2);
if (!logs || logs.length === 0) {
printl("✗ 读取失败");
return [];
}
printl("✓ 读取成功");
// 统计日志数量
let logLines = logs.split("\n").filter(function(l) { return l.trim() !== ""; });
printl("共 " + logLines.length + " 条日志");
return logLines;
}
// ============================================
// 示例10: 数据备份和恢复
// ============================================
function backupAndRestore() {
printl("\n=== 示例10: 数据备份和恢复 ===");
let originalFile = basePath + "original.txt";
let backupFile = basePath + "backup.txt";
// 创建原始数据(覆盖模式)
let originalData = "重要数据1\n重要数据2\n重要数据3";
txt.writeFile(originalFile, originalData, false);
printl("✓ 原始数据已创建");
// 备份数据(复制文件内容,覆盖模式)
let backupData = txt.readFile(originalFile);
if (!backupData || backupData.length === 0) {
printl("✗ 读取原始数据失败");
return "";
}
txt.writeFile(backupFile, backupData, false);
printl("✓ 数据已备份");
// 修改原始数据
txt.writeFile(originalFile, "新数据1\n新数据2", false);
printl("✓ 原始数据已修改: " + txt.readFile(originalFile));
// 从备份恢复
let restoredData = txt.readFile(backupFile);
if (!restoredData || restoredData.length === 0) {
printl(" 读取备份数据失败");
return "";
}
txt.writeFile(originalFile, restoredData, false);
printl("✓ 数据已恢复: " + txt.readFile(originalFile));
return restoredData;
}
// ============================================
// 示例11: 条件读写(检查文件是否存在)
// ============================================
function conditionalReadWrite() {
printl("\n=== 示例11: 条件读写 ===");
let checkFile = basePath + "check.txt";
// 尝试读取文件,如果不存在则创建
let content = txt.readFile(checkFile);
if (!content || content === "") {
printl("✓ 文件不存在或为空,创建新文件");
txt.writeFile(checkFile, "初始化数据\n创建时间: " + new Date().toString(), true);
content = txt.readFile(checkFile);
printl("✓ 文件创建成功");
} else {
printl("✓ 文件已存在,追加新数据");
txt.writeFile(checkFile, "\n更新时间: " + new Date().toString(), true);
content = txt.readFile(checkFile);
printl("✓ 数据追加成功");
}
printl("当前内容:\n" + content);
return content;
}
// ============================================
// 示例12: 多用户数据存储
// ============================================
function multiUserStorage() {
printl("\n=== 示例12: 多用户数据存储 ===");
let usersFile = basePath + "users.txt";
// 用户数据结构: 用户名|密码|邮箱|注册时间(覆盖模式)
let users = [
"user1|pass123|user1@example.com|2024-01-01",
"user2|pass456|user2@example.com|2024-01-02",
"user3|pass789|user3@example.com|2024-01-03"
];
// 保存用户数据(覆盖模式)
txt.writeFile(usersFile, users.join("\n"), false);
printl("✓ 用户数据已保存,共" + users.length + "个用户");
// 读取并查询用户
let userContent = txt.readFile(usersFile);
if (!userContent || userContent.length === 0) {
printl("✗ 读取失败");
return [];
}
printl("✓ 读取成功");
let userLines = userContent.split("\n");
printl("用户列表:");
for (let i = 0; i < userLines.length; i++) {
let userData = userLines.split("|");
if (userData.length >= 4) {
printl("用户" + (i+1) + ": 用户名=" + userData + ", 邮箱=" + userData);
}
}
// 查找特定用户
let searchUsername = "user2";
for (let i = 0; i < userLines.length; i++) {
let userData = userLines.split("|");
if (userData === searchUsername) {
printl("找到用户: " + searchUsername + ", 邮箱: " + userData);
break;
}
}
return userLines;
}
// ============================================
// 执行所有示例
// ============================================
function runAllExamples() {
printl("========================================");
printl("iOS TXT文件读写完整示例开始");
printl("========================================\n");
printl("📁 文件保存路径: " + basePath);
printl("💡 提示: 可以在 AIWROK 的文件管理器中查看这些文件");
printl(" 路径: " + basePath);
printl(" 或通过项目资源目录访问\n");
try {
printl("⏱️3秒后开始执行示例...\n");
sleep.second(秒=3);
basicReadWrite();
sleep.second(秒=2);
appendMode();
sleep.second(秒=2);
overwriteMode();
sleep.second(秒=2);
processMultiLine();
sleep.second(秒=2);
jsonStorage();
sleep.second(秒=2);
listStorage();
sleep.second(秒=2);
keyValueStorage();
sleep.second(秒=2);
chunkedReadWrite();
sleep.second(秒=2);
timestampLog();
sleep.second(秒=2);
backupAndRestore();
sleep.second(秒=2);
conditionalReadWrite();
sleep.second(秒=2);
multiUserStorage();
printl("\n========================================");
printl("✅ 所有示例执行完成!");
printl("========================================");
} catch (e) {
printl("✗ 执行出错: " + e);
}
}
页:
[1]