 | |  |  | 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[i]);
- }
-
- // 解析CSV格式
- if (lines.length > 1) {
- let headers = lines[0].split(",");
- printl("表头: " + headers.join(" | "));
-
- for (let i = 1; i < lines.length; i++) {
- let fields = lines[i].split(",");
- if (fields.length >= 3) {
- printl("记录: 姓名=" + fields[0] + ", 年龄=" + fields[1] + ", 城市=" + fields[2]);
- }
- }
- }
-
- 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[i]);
- }
-
- 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[key]);
- }
- 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[i].trim();
- if (line && line.indexOf("=") > -1) {
- let parts = line.split("=");
- if (parts.length >= 2) {
- let key = parts[0].trim();
- let value = parts.slice(1).join("=").trim();
- parsedConfig[key] = value;
- }
- }
- }
-
- printl("解析的配置:");
- for (let key in parsedConfig) {
- printl(" " + key + " = " + parsedConfig[key]);
- }
-
- 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[i]);
- }
-
- printl("后5行:");
- for (let i = Math.max(0, lines.length - 5); i < lines.length; i++) {
- printl(" " + lines[i]);
- }
-
- 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[i].split("|");
- if (userData.length >= 4) {
- printl(" 用户" + (i+1) + ": 用户名=" + userData[0] + ", 邮箱=" + userData[2]);
- }
- }
-
- // 查找特定用户
- let searchUsername = "user2";
- for (let i = 0; i < userLines.length; i++) {
- let userData = userLines[i].split("|");
- if (userData[0] === searchUsername) {
- printl("找到用户: " + searchUsername + ", 邮箱: " + userData[2]);
- 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);
- }
- }
复制代码
| |  | |  |
|