 | |  |  | AIWROK软件Zip 高级操作复杂示例
- // AIWROK 软件 - Zip 高级操作复杂示例
- // 作者: AIWROK 开发团队
- // 日期: 2024年6月
- // 说明: 本示例演示了zip对象的复杂用法,包括下载、压缩、解压、进度显示、错误处理等
- // 运行环境: AIWROK 软件 Android 版本
- printl("===== AIWROK Zip 高级操作复杂示例开始 =====");
- // 配置参数
- var config = {
- // 临时目录
- tempDir: '/sdcard/aiwrok_zip_test',
- // 下载文件目录
- downloadDir: '/sdcard/aiwrok_zip_test/downloads',
- // 压缩文件目录
- zipDir: '/sdcard/aiwrok_zip_test/zips',
- // 解压文件目录
- unzipDir: '/sdcard/aiwrok_zip_test/unzipped',
- // 要下载的文件列表
- downloadFiles: [
- { name: 'test1.txt', content: '这是测试文件1的内容,用于演示zip操作。' },
- { name: 'test2.txt', content: '这是测试文件2的内容,用于演示zip操作的高级功能。' },
- { name: 'test3.txt', content: '这是测试文件3的内容,包含一些特殊字符:中文、英文、数字1234567890' }
- ],
- // 测试图片base64(简化版)
- testImageBase64: 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg=='
- };
- // 1. 准备工作:创建测试目录
- printl("\n1. 准备工作:创建测试目录");
- function prepareDirectories() {
- try {
- // 创建目录结构
- var dirs = [config.tempDir, config.downloadDir, config.zipDir, config.unzipDir];
- for (var i = 0; i < dirs.length; i++) {
- if (!new java.io.File(dirs[i]).exists()) {
- file.createFloder(dirs[i]);
- printl("✓ 创建目录成功: " + dirs[i]);
- } else {
- printl("⚠️ 目录已存在: " + dirs[i]);
- }
- }
- return true;
- } catch (e) {
- printl("✗ 创建目录失败: " + e.message);
- return false;
- }
- }
- // 2. 创建测试文件
- printl("\n2. 创建测试文件");
- function createTestFiles() {
- try {
- // 创建文本文件
- for (var i = 0; i < config.downloadFiles.length; i++) {
- var filePath = config.downloadDir + '/' + config.downloadFiles[i].name;
- // 先创建文件
- file.createFloder(filePath);
- // 然后写入内容
- try {
- // 尝试使用不同的文件写入方法
- var writeSuccess = false;
-
- if (typeof 文件 !== 'undefined' && typeof 文件.删除写 === 'function') {
- // 使用文件.删除写方法
- writeSuccess = 文件.删除写(filePath, config.downloadFiles[i].content);
- } else if (typeof file !== 'undefined' && typeof file.write === 'function') {
- // 使用file.write方法
- writeSuccess = file.write(filePath, config.downloadFiles[i].content);
- } else {
- // 直接使用Java代码写入文件
- var javaFile = new java.io.File(filePath);
- var writer = new java.io.BufferedWriter(new java.io.FileWriter(javaFile));
- writer.write(config.downloadFiles[i].content);
- writer.close();
- writeSuccess = true;
- }
-
- if (writeSuccess) {
- printl("✓ 创建文本文件成功: " + config.downloadFiles[i].name);
- } else {
- printl("✗ 创建文本文件失败: " + config.downloadFiles[i].name);
- }
- } catch (e) {
- printl("✗ 创建文本文件异常: " + config.downloadFiles[i].name + " - " + e.message);
- }
- }
-
- // 创建图片文件
- var imagePath = config.downloadDir + '/test_image.png';
- if (file.base64ToFile(config.testImageBase64, imagePath)) {
- printl("✓ 创建图片文件成功: test_image.png");
- } else {
- printl("✗ 创建图片文件失败");
- }
-
- return true;
- } catch (e) {
- printl("✗ 创建测试文件失败: " + e.message);
- return false;
- }
- }
- // 3. 进度显示函数
- function showProgress(message, current, total) {
- var percent = Math.round((current / total) * 100);
- printl(message + " " + percent + "% (" + current + "/" + total + ")");
- }
- // 4. 压缩操作示例
- printl("\n3. 压缩操作示例");
- function zipOperations() {
- try {
- // 示例1: 压缩整个文件夹
- printl("\n3.1 压缩整个文件夹");
- var folderZipPath = config.zipDir + '/entire_folder.zip';
- if (zip.zipFolder(config.downloadDir, folderZipPath)) {
- printl("✓ 压缩整个文件夹成功: " + folderZipPath);
- printl(" 文件大小: " + file.getSize(folderZipPath) + " 字节");
- } else {
- printl("✗ 压缩整个文件夹失败");
- }
-
- // 示例2: 创建多个子文件夹并压缩特定文件
- printl("\n3.2 创建多子文件夹并压缩");
- var subdir1 = config.tempDir + '/subdir1';
- var subdir2 = config.tempDir + '/subdir2';
-
- // 创建子文件夹
- file.createFloder(subdir1);
- file.createFloder(subdir2);
-
- // 复制文件到子文件夹
- file.copy(config.downloadDir + '/test1.txt', subdir1 + '/test1.txt');
- file.copy(config.downloadDir + '/test2.txt', subdir2 + '/test2.txt');
- file.copy(config.downloadDir + '/test_image.png', subdir1 + '/test_image.png');
-
- // 压缩整个临时目录(包含子文件夹)
- var multiZipPath = config.zipDir + '/multi_folder.zip';
- if (zip.zipFolder(config.tempDir, multiZipPath)) {
- printl("✓ 压缩多子文件夹成功: " + multiZipPath);
- printl(" 文件大小: " + file.getSize(multiZipPath) + " 字节");
- } else {
- printl("✗ 压缩多子文件夹失败");
- }
-
- return true;
- } catch (e) {
- printl("✗ 压缩操作失败: " + e.message);
- printl(" 错误详情: " + e.toString());
- return false;
- }
- }
- // 5. 解压操作示例
- printl("\n4. 解压操作示例");
- function unzipOperations() {
- try {
- // 示例1: 解压整个zip文件
- printl("\n4.1 解压整个zip文件");
- var zipPath = config.zipDir + '/entire_folder.zip';
- var targetUnzipDir = config.unzipDir + '/entire_unzip';
-
- // 创建目标目录
- file.createFloder(targetUnzipDir);
-
- if (file.unZipFile(zipPath, targetUnzipDir)) {
- printl("✓ 解压整个zip文件成功: " + zipPath);
-
- // 列出解压后的文件
- var files = file.getFilesAllName(targetUnzipDir);
- if (files && files.length > 0) {
- printl(" 解压后的文件:");
- for (var i = 0; i < files.length; i++) {
- printl(" " + (i + 1) + ". " + files[i]);
- }
- }
- } else {
- printl("✗ 解压整个zip文件失败");
- }
-
- // 示例2: 解压多个zip文件到不同目录
- printl("\n4.2 批量解压多个zip文件");
- var zipFiles = file.getFilesAllName(config.zipDir);
- if (zipFiles && zipFiles.length > 0) {
- for (var i = 0; i < zipFiles.length; i++) {
- var zipFileName = zipFiles[i];
- if (zipFileName.endsWith('.zip')) {
- var zipFilePath = config.zipDir + '/' + zipFileName;
- var targetDir = config.unzipDir + '/batch_unzip_' + i;
-
- // 创建目标目录
- file.createFloder(targetDir);
-
- showProgress("正在解压 " + zipFileName + "...", i + 1, zipFiles.length);
-
- if (file.unZipFile(zipFilePath, targetDir)) {
- printl("✓ 批量解压成功: " + zipFileName);
- } else {
- printl("✗ 批量解压失败: " + zipFileName);
- }
- }
- }
- }
-
- return true;
- } catch (e) {
- printl("✗ 解压操作失败: " + e.message);
- printl(" 错误详情: " + e.toString());
- return false;
- }
- }
- // 6. 高级功能:压缩特定类型的文件
- printl("\n5. 高级功能:压缩特定类型的文件");
- function zipSpecificFiles() {
- try {
- // 创建包含不同类型文件的目录
- var mixedDir = config.tempDir + '/mixed_files';
- file.createFloder(mixedDir);
-
- // 创建不同类型的文件
- var testFiles = [
- { path: mixedDir + '/text1.txt', content: '文本文件1' },
- { path: mixedDir + '/text2.txt', content: '文本文件2' },
- { path: mixedDir + '/data.csv', content: '列1,列2,列3\n值1,值2,值3\n值4,值5,值6' }
- ];
-
- for (var i = 0; i < testFiles.length; i++) {
- var filePath = testFiles[i].path;
- var content = testFiles[i].content;
-
- // 先创建文件
- file.createFloder(filePath);
-
- // 然后写入内容
- try {
- var writeSuccess = false;
-
- if (typeof 文件 !== 'undefined' && typeof 文件.删除写 === 'function') {
- writeSuccess = 文件.删除写(filePath, content);
- } else if (typeof file !== 'undefined' && typeof file.write === 'function') {
- writeSuccess = file.write(filePath, content);
- } else {
- var javaFile = new java.io.File(filePath);
- var writer = new java.io.BufferedWriter(new java.io.FileWriter(javaFile));
- writer.write(content);
- writer.close();
- writeSuccess = true;
- }
-
- if (writeSuccess) {
- printl("✓ 创建文件成功: " + filePath);
- } else {
- printl("✗ 创建文件失败: " + filePath);
- }
- } catch (e) {
- printl("✗ 创建文件异常: " + filePath + " - " + e.message);
- }
- }
-
- // 仅压缩txt文件
- printl("\n5.1 仅压缩txt文件");
- var txtZipPath = config.zipDir + '/only_txt_files.zip';
-
- // 获取所有txt文件
- var txtFiles = file.getTypeFilesName(mixedDir, '.txt');
- if (txtFiles && txtFiles.length > 0) {
- // 创建临时目录存放要压缩的txt文件
- var txtTempDir = config.tempDir + '/txt_only_temp';
- file.createFloder(txtTempDir);
-
- // 复制txt文件到临时目录
- for (var i = 0; i < txtFiles.length; i++) {
- file.copy(mixedDir + '/' + txtFiles[i], txtTempDir + '/' + txtFiles[i]);
- }
-
- // 压缩临时目录
- if (zip.zipFolder(txtTempDir, txtZipPath)) {
- printl("✓ 仅压缩txt文件成功: " + txtZipPath);
- printl(" 压缩了 " + txtFiles.length + " 个txt文件");
- } else {
- printl("✗ 仅压缩txt文件失败");
- }
-
- // 删除临时目录
- file.deleteFilesOfDir(txtTempDir);
- }
-
- return true;
- } catch (e) {
- printl("✗ 压缩特定类型文件失败: " + e.message);
- return false;
- }
- }
- // 7. 错误处理示例
- printl("\n6. 错误处理示例");
- function errorHandlingExamples() {
- try {
- printl("\n6.1 测试不存在的文件解压");
- var nonExistentZip = config.zipDir + '/non_existent.zip';
- var targetDir = config.unzipDir + '/error_test';
- file.createFloder(targetDir);
-
- try {
- if (file.unZipFile(nonExistentZip, targetDir)) {
- printl("✓ 解压不存在的文件成功(这是一个错误)");
- } else {
- printl("✓ 正确处理了不存在的文件解压请求");
- }
- } catch (e) {
- printl("✓ 正确捕获了解压不存在文件的异常: " + e.message);
- }
-
- printl("\n6.2 测试压缩空目录");
- var emptyDir = config.tempDir + '/empty_dir';
- file.createFloder(emptyDir);
- var emptyZipPath = config.zipDir + '/empty.zip';
-
- try {
- if (zip.zipFolder(emptyDir, emptyZipPath)) {
- printl("✓ 压缩空目录成功");
- printl(" 空zip文件大小: " + file.getSize(emptyZipPath) + " 字节");
- } else {
- printl("✗ 压缩空目录失败");
- }
- } catch (e) {
- printl("✓ 正确捕获了压缩空目录的异常: " + e.message);
- }
-
- return true;
- } catch (e) {
- printl("✗ 错误处理示例失败: " + e.message);
- return false;
- }
- }
- // 8. 清理工作
- printl("\n7. 清理工作");
- function cleanUp() {
- try {
- // 删除所有测试目录和文件
- if (file.deleteFilesOfDir(config.tempDir)) {
- printl("✓ 成功清理所有测试文件和目录: " + config.tempDir);
- } else {
- printl("✗ 清理测试文件和目录失败,可能需要手动清理");
- }
- return true;
- } catch (e) {
- printl("✗ 清理工作失败: " + e.message);
- printl("提示: 请手动清理剩余文件和目录: " + config.tempDir);
- return false;
- }
- }
- // 执行流程
- try {
- // 1. 准备目录
- if (!prepareDirectories()) {
- throw new Error("准备目录失败");
- }
-
- // 2. 创建测试文件
- if (!createTestFiles()) {
- throw new Error("创建测试文件失败");
- }
-
- // 3. 执行压缩操作
- if (!zipOperations()) {
- throw new Error("压缩操作失败");
- }
-
- // 4. 执行解压操作
- if (!unzipOperations()) {
- throw new Error("解压操作失败");
- }
-
- // 5. 执行特定文件压缩
- if (!zipSpecificFiles()) {
- throw new Error("压缩特定类型文件失败");
- }
-
- // 6. 执行错误处理示例
- if (!errorHandlingExamples()) {
- throw new Error("错误处理示例失败");
- }
-
- // 7. 清理工作
- if (!cleanUp()) {
- throw new Error("清理工作失败");
- }
-
- printl("\n🎉 所有操作执行成功!");
-
- } catch (e) {
- printl("\n❌ 执行过程中发生错误: " + e.message);
- printl(" 错误详情: " + e.toString());
- printl("提示: 请检查错误信息并手动清理可能的残留文件");
- }
- printl("\n===== AIWROK Zip 高级操作复杂示例结束 =====");
- printl("\n注意事项:");
- printl("1. 所有操作都需要适当的文件系统权限");
- printl("2. 大型文件的压缩和解压可能需要较长时间");
- printl("3. 建议在实际应用中添加更多的错误处理和进度显示");
- printl("4. 可以根据需要修改配置参数以适应不同的应用场景");
- printl("5. 本示例演示了zip.unZipFile和zip.zipFolder的高级用法");
复制代码
| |  | |  |
|