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

230

主题

191

回帖

1641

积分

管理员

积分
1641
AIWROK软件txt_文件读写方法小结

1.png

2.png


3.png

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

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

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

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

  14. // 辅助函数: 确保字符串类型
  15. function ensureString(value) {
  16.     if (value === null || value === undefined) {
  17.         return "";
  18.     }
  19.     return String(value);
  20. }

  21. // 辅助函数: 记录操作日志
  22. function logOperation(operation, result, details) {
  23.     var logEntry = new Date().toLocaleString() + " - " + operation + ": " + ensureString(result);
  24.     if (details) {
  25.         logEntry += " (" + ensureString(details) + ")";
  26.     }
  27.     logEntry += "\n";
  28.    
  29.     try {
  30.         txt.writeTxt(logFilePath, logEntry, true);
  31.     } catch (e) {
  32.         printl("✗ 日志记录失败: " + ensureString(e));
  33.     }
  34.    
  35.     return logEntry;
  36. }

  37. // 1. 初始化: 创建日志文件
  38. printl("\n1. 初始化: 创建日志文件");
  39. try {
  40.     var logHeader = "=== AIWROK TXT操作日志 ===\n" +
  41.                    "创建时间: " + new Date().toString() + "\n" +
  42.                    "日志格式: [时间] - [操作]: [结果] (详情)\n\n";
  43.    
  44.     var success = false;
  45.     // 尝试使用writeFileSdcard
  46.     if (txt.writeFileSdcard(logFilePath, logHeader)) {
  47.         printl("✓ 成功创建操作日志文件: " + logFilePath);
  48.         success = true;
  49.     } else {
  50.         // 备选方案: 使用writeTxt的覆盖模式
  51.         printl("⚠ writeFileSdcard失败,尝试使用writeTxt创建日志文件");
  52.         if (txt.writeTxt(logFilePath, logHeader, false)) {
  53.             printl("✓ 成功使用writeTxt创建操作日志文件: " + logFilePath);
  54.             success = true;
  55.         } else {
  56.             printl("✗ 创建日志文件失败");
  57.         }
  58.     }
  59.    
  60.     if (success) {
  61.         logOperation("初始化", "成功", "创建日志文件");
  62.     }
  63.    
  64. } catch (e) {
  65.     printl("✗ 初始化时发生错误: " + ensureString(e));
  66. }

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

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

  88. // 2.2 txt.writeTxt 覆盖模式
  89. printl("\n2.2 使用txt.writeTxt写入 (覆盖模式)");
  90. try {
  91.     var content2 = "这是使用 txt.writeTxt 方法的覆盖模式写入\n" +
  92.                    "参数: path, content, false (false表示覆盖)\n" +
  93.                    "效果: 与writeFileSdcard类似,替换整个文件\n\n";
  94.    
  95.     if (txt.writeTxt(testFilePath, content2, false)) {
  96.         printl("✓ writeTxt (覆盖模式) 写入成功");
  97.         logOperation("writeTxt", "成功", "覆盖模式写入");
  98.     } else {
  99.         printl("✗ writeTxt (覆盖模式) 写入失败");
  100.         logOperation("writeTxt", "失败", "覆盖模式写入");
  101.     }
  102.    
  103. } catch (e) {
  104.     printl("✗ writeTxt (覆盖模式) 操作时发生错误: " + e);
  105.     logOperation("writeTxt", "错误", "覆盖模式: " + e);
  106. }

  107. // 2.3 txt.writeTxt 追加模式
  108. printl("\n2.3 使用txt.writeTxt写入 (追加模式)");
  109. try {
  110.     var content3 = "这是使用 txt.writeTxt 方法的追加模式写入\n" +
  111.                    "参数: path, content, true (true表示追加)\n" +
  112.                    "效果: 在文件末尾添加新内容\n\n";
  113.    
  114.     if (txt.writeTxt(testFilePath, content3, true)) {
  115.         printl("✓ writeTxt (追加模式) 写入成功");
  116.         logOperation("writeTxt", "成功", "追加模式写入");
  117.     } else {
  118.         printl("✗ writeTxt (追加模式) 写入失败");
  119.         logOperation("writeTxt", "失败", "追加模式写入");
  120.     }
  121.    
  122. } catch (e) {
  123.     printl("✗ writeTxt (追加模式) 操作时发生错误: " + e);
  124.     logOperation("writeTxt", "错误", "追加模式: " + e);
  125. }

  126. // 3. 读取文件内容并验证
  127. printl("\n3. 使用txt.readFileSdcard读取文件内容");
  128. try {
  129.     var fileContent = txt.readFileSdcard(testFilePath);
  130.    
  131.     if (fileContent) {
  132.         printl("✓ 成功读取文件内容");
  133.         printl("   文件大小: " + fileContent.length() + " 字符");
  134.         printl("   内容预览 (前200字符): ");
  135.         var previewLength = Math.min(200, fileContent.length());
  136.         printl("   " + fileContent.substring(0, previewLength) + (fileContent.length() > 200 ? "..." : ""));
  137.         
  138.         logOperation("readFileSdcard", "成功", "读取 " + fileContent.length() + " 字符");
  139.     } else {
  140.         printl("✗ 文件读取失败或文件为空");
  141.         logOperation("readFileSdcard", "失败", "文件为空或不存在");
  142.     }
  143.    
  144. } catch (e) {
  145.     printl("✗ readFileSdcard 操作时发生错误: " + e);
  146.     logOperation("readFileSdcard", "错误", e);
  147. }

  148. // 4. 复杂数据处理示例
  149. printl("\n4. 复杂数据处理与写入");
  150. try {
  151.     // 生成模拟传感器数据
  152.     var sensorData = [];
  153.     var baseTime = new Date().getTime();
  154.    
  155.     printl("   正在生成模拟传感器数据...");
  156.     for (var i = 0; i < 50; i++) {
  157.         // 生成带有噪声的模拟数据
  158.         var temperature = (25 + Math.random() * 10 + Math.sin(i/5) * 2).toFixed(2);
  159.         var humidity = (40 + Math.random() * 30 + Math.cos(i/8) * 5).toFixed(2);
  160.         var pressure = (1013 + Math.random() * 10 + Math.sin(i/3) * 2).toFixed(2);
  161.         
  162.         var record = {
  163.             timestamp: baseTime + i * 1000,
  164.             sensorId: "SENSOR_001",
  165.             temperature: temperature,
  166.             humidity: humidity,
  167.             pressure: pressure,
  168.             status: "NORMAL",
  169.             sequence: i + 1
  170.         };
  171.         
  172.         // 格式化数据为CSV格式
  173.         var csvLine = record.timestamp + "," +
  174.                       record.sensorId + "," +
  175.                       record.temperature + "," +
  176.                       record.humidity + "," +
  177.                       record.pressure + "," +
  178.                       record.status + "," +
  179.                       record.sequence + "\n";
  180.         
  181.         sensorData.push(csvLine);
  182.     }
  183.    
  184.     // 写入CSV文件
  185.     var csvHeader = "timestamp,sensorId,temperature,humidity,pressure,status,sequence\n";
  186.    
  187.     var csvSuccess = false;
  188.    
  189.     // 尝试使用writeFileSdcard写入CSV头
  190.     if (txt.writeFileSdcard(testFilePath, csvHeader)) {
  191.         printl("✓ 成功写入CSV文件头");
  192.         csvSuccess = true;
  193.     } else {
  194.         // 备选方案: 使用writeTxt的覆盖模式
  195.         printl("⚠ writeFileSdcard失败,尝试使用writeTxt写入CSV文件头");
  196.         if (txt.writeTxt(testFilePath, csvHeader, false)) {
  197.             printl("✓ 成功使用writeTxt写入CSV文件头");
  198.             csvSuccess = true;
  199.         } else {
  200.             printl("✗ CSV文件头写入失败");
  201.             logOperation("复杂数据写入", "失败", "CSV文件头写入失败");
  202.         }
  203.     }
  204.    
  205.     if (csvSuccess) {
  206.         // 追加所有数据行
  207.         var successCount = 0;
  208.         for (var j = 0; j < sensorData.length; j++) {
  209.             if (txt.writeTxt(testFilePath, sensorData[j], true)) {
  210.                 successCount++;
  211.             }
  212.         }
  213.         
  214.         printl("✓ 成功写入 " + successCount + "/" + sensorData.length + " 行传感器数据");
  215.         printl("   数据格式: CSV (逗号分隔值)");
  216.         logOperation("复杂数据写入", "成功", "生成并写入50行传感器数据");
  217.     }
  218.    
  219. } catch (e) {
  220.     printl("✗ 复杂数据处理时发生错误: " + e);
  221.     logOperation("复杂数据处理", "错误", e);
  222. }

  223. // 5. 大文件处理示例
  224. printl("\n5. 大文件处理示例");
  225. try {
  226.     // 生成大文件内容
  227.     var largeContent = "";
  228.     var chunkSize = 1024; // 1KB per chunk
  229.     var chunks = 20;     // 20 chunks = ~20KB
  230.    
  231.     printl("   正在生成约 " + (chunkSize * chunks / 1024) + "KB 的大文件...");
  232.    
  233.     // 写入大文件头
  234.     var largeFileSuccess = false;
  235.     if (txt.writeFileSdcard(largeFilePath, "=== AIWROK 大文件测试 ===\n")) {
  236.         largeFileSuccess = true;
  237.     } else {
  238.         // 备选方案: 使用writeTxt的覆盖模式
  239.         printl("⚠ writeFileSdcard失败,尝试使用writeTxt创建大文件");
  240.         if (txt.writeTxt(largeFilePath, "=== AIWROK 大文件测试 ===\n", false)) {
  241.             largeFileSuccess = true;
  242.         } else {
  243.             printl("✗ 大文件创建失败");
  244.             logOperation("大文件处理", "失败", "文件创建失败");
  245.         }
  246.     }
  247.    
  248.     if (largeFileSuccess) {
  249.         // 分块写入大内容
  250.         for (var k = 1; k <= chunks; k++) {
  251.             var chunk = "块 " + k + ": " + "X".repeat(chunkSize - 10) + "\n";
  252.             if (!txt.writeTxt(largeFilePath, chunk, true)) {
  253.                 printl("✗ 第 " + k + " 块写入失败");
  254.                 break;
  255.             }
  256.         }
  257.         
  258.         // 验证大文件
  259.         var largeContentRead = txt.readFileSdcard(largeFilePath);
  260.         if (largeContentRead) {
  261.             printl("✓ 大文件写入成功");
  262.             printl("   文件大小: " + largeContentRead.length() + " 字符");
  263.         printl("   行数: " + largeContentRead.split('\n').length);
  264.             logOperation("大文件处理", "成功", "生成 " + largeContentRead.length() + " 字符的文件");
  265.         } else {
  266.             printl("✗ 大文件验证失败");
  267.         }
  268.         
  269.     } else {
  270.         printl("✗ 大文件创建失败");
  271.         logOperation("大文件处理", "失败", "文件创建失败");
  272.     }
  273.    
  274. } catch (e) {
  275.     printl("✗ 大文件处理时发生错误: " + e);
  276.     logOperation("大文件处理", "错误", e);
  277. }

  278. // 6. 文件备份与恢复
  279. printl("\n6. 文件备份与恢复");
  280. try {
  281.     // 备份文件
  282.     var originalContent = txt.readFileSdcard(testFilePath);
  283.     if (originalContent) {
  284.         if (txt.writeFileSdcard(backupFilePath, originalContent)) {
  285.             printl("✓ 成功备份文件到: " + backupFilePath);
  286.             logOperation("文件备份", "成功", "备份到 " + backupFilePath);
  287.             
  288.             // 模拟文件损坏
  289.             txt.writeFileSdcard(testFilePath, "=== 文件已损坏 ===");
  290.             printl("   模拟文件损坏完成");
  291.             
  292.             // 恢复文件
  293.             var backupContent = txt.readFileSdcard(backupFilePath);
  294.             if (txt.writeFileSdcard(testFilePath, backupContent)) {
  295.                 printl("✓ 成功从备份恢复文件");
  296.                 logOperation("文件恢复", "成功", "从 " + backupFilePath + " 恢复");
  297.             } else {
  298.                 printl("✗ 文件恢复失败");
  299.             }
  300.             
  301.         } else {
  302.             printl("✗ 文件备份失败");
  303.             logOperation("文件备份", "失败", "备份到 " + backupFilePath);
  304.         }
  305.     } else {
  306.         printl("✗ 原文件读取失败,无法备份");
  307.     }
  308.    
  309. } catch (e) {
  310.     printl("✗ 文件备份与恢复时发生错误: " + e);
  311.     logOperation("文件备份恢复", "错误", e);
  312. }

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

  315. // 7.1 写入空内容
  316. printl("\n7.1 写入空内容测试");
  317. try {
  318.     if (txt.writeTxt(testFilePath, "\n--- 空内容测试 ---\n", true)) {
  319.         if (txt.writeTxt(testFilePath, "", true)) {
  320.             printl("✓ 成功写入空内容");
  321.             logOperation("边界测试", "成功", "写入空内容");
  322.         }
  323.         if (txt.writeTxt(testFilePath, "\n--- 空内容测试结束 ---\n", true)) {
  324.             printl("✓ 空内容后写入正常");
  325.         }
  326.     }
  327. } catch (e) {
  328.     printl("✗ 空内容测试失败: " + e);
  329. }

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

  355. // 8. 总结与清理
  356. printl("\n8. 总结与清理");
  357. try {
  358.     // 统计操作结果
  359.     printl("\n=== 操作结果统计 ===");
  360.    
  361.     // 读取日志文件
  362.     var logContent = txt.readFileSdcard(logFilePath);
  363.     if (logContent) {
  364.         var logLines = logContent.split('\n');
  365.         var successCount = 0;
  366.         var failedCount = 0;
  367.         
  368.         // 使用ES5兼容的for循环替代for...of
  369.         for (var i = 0; i < logLines.length; i++) {
  370.             var line = logLines[i];
  371.             // 确保line是字符串类型
  372.             line = ensureString(line);
  373.             // 检测成功和失败的日志条目
  374.             if (line.indexOf(" - 成功") !== -1) successCount++;
  375.             if (line.indexOf(" - 失败") !== -1 || line.indexOf(" - 错误") !== -1) failedCount++;
  376.         }
  377.         
  378.         printl("✓ 成功操作: " + successCount);
  379.         printl("✗ 失败操作: " + failedCount);
  380.         printl("   总操作数: " + (successCount + failedCount));
  381.         
  382.         // 显示关键文件信息
  383.         var testContent = txt.readFileSdcard(testFilePath);
  384.         var backupContent = txt.readFileSdcard(backupFilePath);
  385.         var largeContent = txt.readFileSdcard(largeFilePath);
  386.         
  387.         printl("\n=== 生成的文件信息 ===");
  388.         printl("1. 测试文件: " + testFilePath);
  389.         printl("   - 大小: " + (testContent ? testContent.length() : 0) + " 字符");
  390.         printl("   - 行数: " + (testContent ? testContent.split('\n').length : 0));
  391.         
  392.         printl("\n2. 备份文件: " + backupFilePath);
  393.         printl("   - 大小: " + (backupContent ? backupContent.length() : 0) + " 字符");
  394.         
  395.         printl("\n3. 大文件: " + largeFilePath);
  396.         printl("   - 大小: " + (largeContent ? largeContent.length() : 0) + " 字符");
  397.         
  398.         printl("\n4. 日志文件: " + logFilePath);
  399.         printl("   - 大小: " + (logContent ? logContent.length() : 0) + " 字符");
  400.         printl("   - 日志条目数: " + (logLines.length - 4)); // 减去头部
  401.     }
  402.    
  403.     printl("\n✓ 示例完成! 所有测试结果已记录到日志文件");
  404.     printl("   您可以在 " + logFilePath + " 查看详细操作日志");
  405.    
  406. } catch (e) {
  407.     printl("✗ 总结时发生错误: " + e);
  408. }

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

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


上一篇: AIWROK软件file文件操作方法小结

下一篇: 没有了

举报 回复