 | |  |  | 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[j], 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[i];
- // 确保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); // 追加写入");
复制代码
| |  | |  |
|