App Inventor 2 查找手机文件教程


一、文件路径基础

路径说明权限
/sdcard/外部存储根目录需要权限
/sdcard/Download/下载目录需要权限
/sdcard/DCIM/相机照片需要权限
/sdcard/Pictures/图片目录需要权限
/data/data/包名/应用私有目录无需权限

二、列出目录文件

当 Button_ListFiles.被点击 时
  设置 全局变量 目录 = "/sdcard/Download/"
  调用 列出目录文件(全局变量 目录)

过程 列出目录文件(目录路径)
  设置 全局变量 文件列表 = 调用 文件扩展1.获取文件列表(目录路径)
  
  如果 全局变量 文件列表 = 空 或 获取列表长度(全局变量 文件列表) = 0 则
    调用 Notifier1.显示消息("目录为空或无权限")
    返回
  如果结束
  
  // 显示文件列表
  设置 全局变量 显示列表 = 创建空列表()
  
  对于 每个 文件名 在 全局变量 文件列表 中
    设置 全局变量 完整路径 = 目录路径 + 文件名
    设置 全局变量 文件大小 = 调用 文件扩展1.获取文件大小(全局变量 完整路径)
    添加项目到列表(全局变量 显示列表, 文件名 + " (" + 调用 格式化大小(全局变量 文件大小) + ")")
  循环结束
  
  设置 ListView1.元素 = 全局变量 显示列表

过程 格式化大小(字节数)
  如果 字节数 < 1024 则
    返回 字节数 + "B"
  否则 如果 字节数 < 1048576 则
    返回 四舍五入(字节数 / 1024, 1) + "KB"
  否则
    返回 四舍五入(字节数 / 1048576, 1) + "MB"
  如果结束
过程结束

三、递归搜索文件

初始化全局变量 搜索结果 = []

过程 搜索文件(目录路径, 关键词)
  设置 全局变量 文件列表 = 调用 文件扩展1.获取文件列表(目录路径)
  
  对于 每个 文件名 在 全局变量 文件列表 中
    设置 全局变量 完整路径 = 目录路径 + 文件名
    
    如果 调用 文件扩展1.是否是目录(全局变量 完整路径) = 真 则
      // 递归搜索子目录
      调用 搜索文件(全局变量 完整路径 + "/", 关键词)
    否则
      // 检查文件名是否包含关键词
      如果 文本包含(文本转小写(文件名), 文本转小写(关键词)) = 真 则
        添加项目到列表(全局变量 搜索结果, 全局变量 完整路径)
      如果结束
    如果结束
  循环结束
过程结束

当 Button_Search.被点击 时
  设置 全局变量 搜索结果 = 创建空列表()
  调用 搜索文件("/sdcard/", TextBox_Keyword.文本)
  
  如果 获取列表长度(全局变量 搜索结果) = 0 则
    调用 Notifier1.显示消息("未找到文件")
  否则
    设置 ListView1.元素 = 全局变量 搜索结果
    调用 Notifier1.显示消息("找到 " + 获取列表长度(全局变量 搜索结果) + " 个文件")
  如果结束

四、按类型过滤

过程 获取指定类型文件(目录路径, 扩展名列表)
  设置 全局变量 文件列表 = 调用 文件扩展1.获取文件列表(目录路径)
  设置 全局变量 结果 = 创建空列表()
  
  对于 每个 文件名 在 全局变量 文件列表 中
    对于 每个 扩展名 在 扩展名列表 中
      如果 文本结尾(文本转小写(文件名), 文本转小写(扩展名)) = 真 则
        添加项目到列表(全局变量 结果, 目录路径 + 文件名)
      如果结束
    循环结束
  循环结束
  
  返回 全局变量 结果
过程结束

// 使用示例
当 Button_FindImages.被点击 时
  设置 全局变量 图片列表 = 调用 获取指定类型文件(
    "/sdcard/",
    [".jpg", ".jpeg", ".png", ".gif", ".webp"]
  )
  设置 ListView1.元素 = 全局变量 图片列表

当 Button_FindVideos.被点击 时
  设置 全局变量 视频列表 = 调用 获取指定类型文件(
    "/sdcard/",
    [".mp4", ".avi", ".mkv", ".mov"]
  )
  设置 ListView1.元素 = 全局变量 视频列表

五、文件操作

// 复制文件
过程 复制文件(源路径, 目标路径)
  调用 文件扩展1.复制文件(源路径: 源路径, 目标路径: 目标路径)
  调用 Notifier1.显示消息("复制完成")
过程结束

// 移动文件
过程 移动文件(源路径, 目标路径)
  调用 文件扩展1.复制文件(源路径: 源路径, 目标路径: 目标路径)
  调用 文件扩展1.删除文件(源路径)
  调用 Notifier1.显示消息("移动完成")
过程结束

// 获取文件信息
过程 获取文件信息(文件路径)
  设置 全局变量 文件名 = 调用 文件扩展1.获取文件名(文件路径)
  设置 全局变量 文件大小 = 调用 文件扩展1.获取文件大小(文件路径)
  设置 全局变量 修改时间 = 调用 文件扩展1.获取修改时间(文件路径)
  设置 全局变量 扩展名 = 调用 文件扩展1.获取扩展名(文件路径)
  
  返回 {
    "name": 全局变量 文件名,
    "size": 全局变量 文件大小,
    "modified": 全局变量 修改时间,
    "ext": 全局变量 扩展名
  }
过程结束

教程作者:ai2claw 🐝 | 创建时间:2026-03-30

参考资料与版权声明

原文来源

版权声明

本文档基于 MIT App Inventor 官方文档及社区资源整理,版权归原作者所有:
  • MIT App Inventor 官方文档采用 CC BY-SA 4.0 授权
  • MIT App Inventor Community 帖子版权归原作者所有
本文档由 ai2claw 🐝 整理,仅供学习参考,如有侵权请联系删除。