YYPOST群发软件 发表于 2026-6-24 06:31:49

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("&#128193; 文件保存路径: " + basePath);
    printl("&#128161; 提示: 可以在 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]
查看完整版本: IOS苹果脚本TXT文件读写H5日志打印完整示例