YYPOST群发软件 发表于 2025-12-8 09:54:51

AIWROK软件txt_文件读写方法小结

AIWROK软件txt_文件读写方法小结






// AIWROK 软件 - txt 对象文件操作复杂示例
// 作者: AIWROK 开发团队
// 日期: 2025年12月
//🍎交流QQ群711841924群一,苹果内测群,528816639

// 说明: 本示例演示了txt对象的readFileSdcard、writeFileSdcard和writeTxt方法的高级使用场景
// 包含边界情况处理、错误检测、复杂数据处理等实用功能
// 运行环境: AIWROK 软件 Android 版本

printl("===== AIWROK txt 对象文件操作复杂示例开始 =====");

// 定义测试文件路径
var testFilePath = '/sdcard/aiwrok_txt_test.txt';
var backupFilePath = '/sdcard/aiwrok_txt_backup.txt';
var logFilePath = '/sdcard/aiwrok_txt_operation_log.txt';
var largeFilePath = '/sdcard/aiwrok_txt_large.txt';

// 辅助函数: 确保字符串类型
function ensureString(value) {
    if (value === null || value === undefined) {
      return "";
    }
    return String(value);
}

// 辅助函数: 记录操作日志
function logOperation(operation, result, details) {
    var logEntry = new Date().toLocaleString() + " - " + operation + ": " + ensureString(result);
    if (details) {
      logEntry += " (" + ensureString(details) + ")";
    }
    logEntry += "\n";
   
    try {
      txt.writeTxt(logFilePath, logEntry, true);
    } catch (e) {
      printl("✗ 日志记录失败: " + ensureString(e));
    }
   
    return logEntry;
}

// 1. 初始化: 创建日志文件
printl("\n1. 初始化: 创建日志文件");
try {
    var logHeader = "=== AIWROK TXT操作日志 ===\n" +
                   "创建时间: " + new Date().toString() + "\n" +
                   "日志格式: [时间] - [操作]: [结果] (详情)\n\n";
   
    var success = false;
    // 尝试使用writeFileSdcard
    if (txt.writeFileSdcard(logFilePath, logHeader)) {
      printl("✓ 成功创建操作日志文件: " + logFilePath);
      success = true;
    } else {
      // 备选方案: 使用writeTxt的覆盖模式
      printl("⚠ writeFileSdcard失败,尝试使用writeTxt创建日志文件");
      if (txt.writeTxt(logFilePath, logHeader, false)) {
            printl("✓ 成功使用writeTxt创建操作日志文件: " + logFilePath);
            success = true;
      } else {
            printl("✗ 创建日志文件失败");
      }
    }
   
    if (success) {
      logOperation("初始化", "成功", "创建日志文件");
    }
   
} catch (e) {
    printl("✗ 初始化时发生错误: " + ensureString(e));
}

// 2. 三种写入方法的对比演示
printl("\n2. 三种写入方法的对比演示");

// 2.1 txt.writeFileSdcard方法
printl("\n2.1 使用txt.writeFileSdcard写入");
try {
    var content1 = "这是使用 txt.writeFileSdcard 方法写入的内容\n" +
                   "特点: 覆盖模式写入,每次都会替换整个文件内容\n" +
                   "适合: 初始化文件或完全更新文件内容\n\n";
   
    if (txt.writeFileSdcard(testFilePath, content1)) {
      printl("✓ writeFileSdcard 写入成功");
      logOperation("writeFileSdcard", "成功", "写入基础内容");
    } else {
      printl("✗ writeFileSdcard 写入失败 (可能是权限或API问题)");
      logOperation("writeFileSdcard", "失败", "写入基础内容");
    }
   
} catch (e) {
    printl("✗ writeFileSdcard 操作时发生错误: " + ensureString(e));
    logOperation("writeFileSdcard", "错误", ensureString(e));
}

// 2.2 txt.writeTxt 覆盖模式
printl("\n2.2 使用txt.writeTxt写入 (覆盖模式)");
try {
    var content2 = "这是使用 txt.writeTxt 方法的覆盖模式写入\n" +
                   "参数: path, content, false (false表示覆盖)\n" +
                   "效果: 与writeFileSdcard类似,替换整个文件\n\n";
   
    if (txt.writeTxt(testFilePath, content2, false)) {
      printl("✓ writeTxt (覆盖模式) 写入成功");
      logOperation("writeTxt", "成功", "覆盖模式写入");
    } else {
      printl("✗ writeTxt (覆盖模式) 写入失败");
      logOperation("writeTxt", "失败", "覆盖模式写入");
    }
   
} catch (e) {
    printl("✗ writeTxt (覆盖模式) 操作时发生错误: " + e);
    logOperation("writeTxt", "错误", "覆盖模式: " + e);
}

// 2.3 txt.writeTxt 追加模式
printl("\n2.3 使用txt.writeTxt写入 (追加模式)");
try {
    var content3 = "这是使用 txt.writeTxt 方法的追加模式写入\n" +
                   "参数: path, content, true (true表示追加)\n" +
                   "效果: 在文件末尾添加新内容\n\n";
   
    if (txt.writeTxt(testFilePath, content3, true)) {
      printl("✓ writeTxt (追加模式) 写入成功");
      logOperation("writeTxt", "成功", "追加模式写入");
    } else {
      printl("✗ writeTxt (追加模式) 写入失败");
      logOperation("writeTxt", "失败", "追加模式写入");
    }
   
} catch (e) {
    printl("✗ writeTxt (追加模式) 操作时发生错误: " + e);
    logOperation("writeTxt", "错误", "追加模式: " + e);
}

// 3. 读取文件内容并验证
printl("\n3. 使用txt.readFileSdcard读取文件内容");
try {
    var fileContent = txt.readFileSdcard(testFilePath);
   
    if (fileContent) {
      printl("✓ 成功读取文件内容");
      printl("   文件大小: " + fileContent.length() + " 字符");
      printl("   内容预览 (前200字符): ");
      var previewLength = Math.min(200, fileContent.length());
      printl("   " + fileContent.substring(0, previewLength) + (fileContent.length() > 200 ? "..." : ""));
      
      logOperation("readFileSdcard", "成功", "读取 " + fileContent.length() + " 字符");
    } else {
      printl("✗ 文件读取失败或文件为空");
      logOperation("readFileSdcard", "失败", "文件为空或不存在");
    }
   
} catch (e) {
    printl("✗ readFileSdcard 操作时发生错误: " + e);
    logOperation("readFileSdcard", "错误", e);
}

// 4. 复杂数据处理示例
printl("\n4. 复杂数据处理与写入");
try {
    // 生成模拟传感器数据
    var sensorData = [];
    var baseTime = new Date().getTime();
   
    printl("   正在生成模拟传感器数据...");
    for (var i = 0; i < 50; i++) {
      // 生成带有噪声的模拟数据
      var temperature = (25 + Math.random() * 10 + Math.sin(i/5) * 2).toFixed(2);
      var humidity = (40 + Math.random() * 30 + Math.cos(i/8) * 5).toFixed(2);
      var pressure = (1013 + Math.random() * 10 + Math.sin(i/3) * 2).toFixed(2);
      
      var record = {
            timestamp: baseTime + i * 1000,
            sensorId: "SENSOR_001",
            temperature: temperature,
            humidity: humidity,
            pressure: pressure,
            status: "NORMAL",
            sequence: i + 1
      };
      
      // 格式化数据为CSV格式
      var csvLine = record.timestamp + "," +
                      record.sensorId + "," +
                      record.temperature + "," +
                      record.humidity + "," +
                      record.pressure + "," +
                      record.status + "," +
                      record.sequence + "\n";
      
      sensorData.push(csvLine);
    }
   
    // 写入CSV文件
    var csvHeader = "timestamp,sensorId,temperature,humidity,pressure,status,sequence\n";
   
    var csvSuccess = false;
   
    // 尝试使用writeFileSdcard写入CSV头
    if (txt.writeFileSdcard(testFilePath, csvHeader)) {
      printl("✓ 成功写入CSV文件头");
      csvSuccess = true;
    } else {
      // 备选方案: 使用writeTxt的覆盖模式
      printl("⚠ writeFileSdcard失败,尝试使用writeTxt写入CSV文件头");
      if (txt.writeTxt(testFilePath, csvHeader, false)) {
            printl("✓ 成功使用writeTxt写入CSV文件头");
            csvSuccess = true;
      } else {
            printl("✗ CSV文件头写入失败");
            logOperation("复杂数据写入", "失败", "CSV文件头写入失败");
      }
    }
   
    if (csvSuccess) {
      // 追加所有数据行
      var successCount = 0;
      for (var j = 0; j < sensorData.length; j++) {
            if (txt.writeTxt(testFilePath, sensorData, true)) {
                successCount++;
            }
      }
      
      printl("✓ 成功写入 " + successCount + "/" + sensorData.length + " 行传感器数据");
      printl("   数据格式: CSV (逗号分隔值)");
      logOperation("复杂数据写入", "成功", "生成并写入50行传感器数据");
    }
   
} catch (e) {
    printl("✗ 复杂数据处理时发生错误: " + e);
    logOperation("复杂数据处理", "错误", e);
}

// 5. 大文件处理示例
printl("\n5. 大文件处理示例");
try {
    // 生成大文件内容
    var largeContent = "";
    var chunkSize = 1024; // 1KB per chunk
    var chunks = 20;   // 20 chunks = ~20KB
   
    printl("   正在生成约 " + (chunkSize * chunks / 1024) + "KB 的大文件...");
   
    // 写入大文件头
    var largeFileSuccess = false;
    if (txt.writeFileSdcard(largeFilePath, "=== AIWROK 大文件测试 ===\n")) {
      largeFileSuccess = true;
    } else {
      // 备选方案: 使用writeTxt的覆盖模式
      printl("⚠ writeFileSdcard失败,尝试使用writeTxt创建大文件");
      if (txt.writeTxt(largeFilePath, "=== AIWROK 大文件测试 ===\n", false)) {
            largeFileSuccess = true;
      } else {
            printl("✗ 大文件创建失败");
            logOperation("大文件处理", "失败", "文件创建失败");
      }
    }
   
    if (largeFileSuccess) {
      // 分块写入大内容
      for (var k = 1; k <= chunks; k++) {
            var chunk = "块 " + k + ": " + "X".repeat(chunkSize - 10) + "\n";
            if (!txt.writeTxt(largeFilePath, chunk, true)) {
                printl("✗ 第 " + k + " 块写入失败");
                break;
            }
      }
      
      // 验证大文件
      var largeContentRead = txt.readFileSdcard(largeFilePath);
      if (largeContentRead) {
            printl("✓ 大文件写入成功");
            printl("   文件大小: " + largeContentRead.length() + " 字符");
      printl("   行数: " + largeContentRead.split('\n').length);
            logOperation("大文件处理", "成功", "生成 " + largeContentRead.length() + " 字符的文件");
      } else {
            printl("✗ 大文件验证失败");
      }
      
    } else {
      printl("✗ 大文件创建失败");
      logOperation("大文件处理", "失败", "文件创建失败");
    }
   
} catch (e) {
    printl("✗ 大文件处理时发生错误: " + e);
    logOperation("大文件处理", "错误", e);
}

// 6. 文件备份与恢复
printl("\n6. 文件备份与恢复");
try {
    // 备份文件
    var originalContent = txt.readFileSdcard(testFilePath);
    if (originalContent) {
      if (txt.writeFileSdcard(backupFilePath, originalContent)) {
            printl("✓ 成功备份文件到: " + backupFilePath);
            logOperation("文件备份", "成功", "备份到 " + backupFilePath);
            
            // 模拟文件损坏
            txt.writeFileSdcard(testFilePath, "=== 文件已损坏 ===");
            printl("   模拟文件损坏完成");
            
            // 恢复文件
            var backupContent = txt.readFileSdcard(backupFilePath);
            if (txt.writeFileSdcard(testFilePath, backupContent)) {
                printl("✓ 成功从备份恢复文件");
                logOperation("文件恢复", "成功", "从 " + backupFilePath + " 恢复");
            } else {
                printl("✗ 文件恢复失败");
            }
            
      } else {
            printl("✗ 文件备份失败");
            logOperation("文件备份", "失败", "备份到 " + backupFilePath);
      }
    } else {
      printl("✗ 原文件读取失败,无法备份");
    }
   
} catch (e) {
    printl("✗ 文件备份与恢复时发生错误: " + e);
    logOperation("文件备份恢复", "错误", e);
}

// 7. 边界情况处理
printl("\n7. 边界情况处理");

// 7.1 写入空内容
printl("\n7.1 写入空内容测试");
try {
    if (txt.writeTxt(testFilePath, "\n--- 空内容测试 ---\n", true)) {
      if (txt.writeTxt(testFilePath, "", true)) {
            printl("✓ 成功写入空内容");
            logOperation("边界测试", "成功", "写入空内容");
      }
      if (txt.writeTxt(testFilePath, "\n--- 空内容测试结束 ---\n", true)) {
            printl("✓ 空内容后写入正常");
      }
    }
} catch (e) {
    printl("✗ 空内容测试失败: " + e);
}

// 7.2 特殊字符处理
printl("\n7.2 特殊字符处理测试");
try {
    var specialChars = "特殊字符测试: \n" +
                      "中文: 你好世界\n" +
                      "符号: !@#$%^&*()_+-=[]{}|;:,.<>?\"'\\/\n" +
                      "Unicode: \u4f60\u597d\u4e16\u754c (你好世界)\n" +
                      "控制字符: \t\r\b\f\n" +
                      "数学符号: π≈3.14159, φ≈1.618\n";
   
    if (txt.writeTxt(testFilePath, specialChars, true)) {
      printl("✓ 成功写入特殊字符");
      logOperation("边界测试", "成功", "写入各种特殊字符");
      
      // 验证特殊字符读取
      var readSpecial = txt.readFileSdcard(testFilePath);
      if (readSpecial && readSpecial.indexOf("特殊字符测试") !== -1) {
            printl("✓ 特殊字符读取正常");
      } else {
            printl("✗ 特殊字符读取异常");
      }
    }
} catch (e) {
    printl("✗ 特殊字符处理测试失败: " + e);
}

// 8. 总结与清理
printl("\n8. 总结与清理");
try {
    // 统计操作结果
    printl("\n=== 操作结果统计 ===");
   
    // 读取日志文件
    var logContent = txt.readFileSdcard(logFilePath);
    if (logContent) {
      var logLines = logContent.split('\n');
      var successCount = 0;
      var failedCount = 0;
      
      // 使用ES5兼容的for循环替代for...of
      for (var i = 0; i < logLines.length; i++) {
            var line = logLines;
            // 确保line是字符串类型
            line = ensureString(line);
            // 检测成功和失败的日志条目
            if (line.indexOf(" - 成功") !== -1) successCount++;
            if (line.indexOf(" - 失败") !== -1 || line.indexOf(" - 错误") !== -1) failedCount++;
      }
      
      printl("✓ 成功操作: " + successCount);
      printl("✗ 失败操作: " + failedCount);
      printl("   总操作数: " + (successCount + failedCount));
      
      // 显示关键文件信息
      var testContent = txt.readFileSdcard(testFilePath);
      var backupContent = txt.readFileSdcard(backupFilePath);
      var largeContent = txt.readFileSdcard(largeFilePath);
      
      printl("\n=== 生成的文件信息 ===");
      printl("1. 测试文件: " + testFilePath);
      printl("   - 大小: " + (testContent ? testContent.length() : 0) + " 字符");
      printl("   - 行数: " + (testContent ? testContent.split('\n').length : 0));
      
      printl("\n2. 备份文件: " + backupFilePath);
      printl("   - 大小: " + (backupContent ? backupContent.length() : 0) + " 字符");
      
      printl("\n3. 大文件: " + largeFilePath);
      printl("   - 大小: " + (largeContent ? largeContent.length() : 0) + " 字符");
      
      printl("\n4. 日志文件: " + logFilePath);
      printl("   - 大小: " + (logContent ? logContent.length() : 0) + " 字符");
      printl("   - 日志条目数: " + (logLines.length - 4)); // 减去头部
    }
   
    printl("\n✓ 示例完成! 所有测试结果已记录到日志文件");
    printl("   您可以在 " + logFilePath + " 查看详细操作日志");
   
} catch (e) {
    printl("✗ 总结时发生错误: " + e);
}

printl("\n===== AIWROK txt 对象文件操作复杂示例结束 =====");
printl("\n提示: 如需重新运行示例,请确保已关闭正在使用这些文件的其他程序。");

// 以下是用户指定的三个方法的简单调用示例(可直接复制使用)
printl("\n\n=== 用户指定方法的快速参考 ===");
printl("// 1. 读取SD卡上的文件");
printl("var content = txt.readFileSdcard('/sdcard/1.txt');");
printl("printl('读取内容: ' + content);");
printl("");
printl("// 2. 写入内容到SD卡文件(覆盖模式)");
printl("txt.writeFileSdcard('/sdcard/1.txt', '测试内容');");
printl("");
printl("// 3. 使用writeTxt写入内容(覆盖模式为false,追加模式为true)");
printl("txt.writeTxt('/sdcard/1.txt', '测试内容', false); // 覆盖写入");
printl("txt.writeTxt('/sdcard/1.txt', '追加内容', true);// 追加写入");


页: [1]
查看完整版本: AIWROK软件txt_文件读写方法小结