1.获取安卓文件目录

998 阅读1分钟

GitHub: github.com/DWL716/unia…

在通过uniapp开发移动端App时候有个需求需要获取手机目录文件列表和微信聊天记录的PDF、Word等聊天文件

09cc3600ed02dc703ac5f26ef528839.png

但是发现uniapp没有提供相应api,且通过 HTML5+ 的 plus.io.resolveLocalFileSystemURL 读取本地文件或获取文件列表会受限(安卓10+以上系统无法读取

获取安卓手机目录文件列表有以下几种方法

  1. 使用 5+ 的 plus.io.resolveLocalFileSystemURL Api
  2. 安卓原生方法 File
  3. 可以通过打开安卓原生系统文件管理器
  4. 可以通过 webView

1.安卓10+以下系统获取文件目录

通过5+ 提供的api获取文件目录 plus.io.resolveLocalFileSystemURL 对应 api 查看

plus.io.resolveLocalFileSystemURL(
    '/storage/emulated/0',
    (entry) => {
      var directoryReader = entry.createReader(); //创建目录读取对象
      directoryReader.readEntries(
        (entries: any[]) => {
          //返回的是指定文件夹下的文件列表和 uni.getSavedFileList(OBJECT)效果一样
          for (let i = 0; i < entries.length; i++) {
            console.log(
              entries[i].fullPath, // 文件路径
              entries[i].fileSystem,
              Object.keys(entries[i])
            );
          }

          console.log(entries[0].name);
        },
        (err) => {
          console.log("访问目录失败: ", err);
        }
      );
    },
    (err) => {
      console.log("访问指定目录失败:" + err.message);
    }
  );

2.安卓10+以上系统获取文件目录

当然 安卓10以下版本也都可以用,但是无法获取 Android/data 目录列表 通过引入安卓原生类 File 及可获取文件列表及文件

// 导入 java.io.File 类
var File = plus.android.importClass('java.io.File');
// 创建 File 对象,指定目录路径
var dir = new File(dirPath);

// 判断目录是否存在
if (!dir.exists()) return console.log('目录不存在');
	
// 获取目录下的文件列表
var files = dir.listFiles();
if (files == null) return;

// 遍历文件列表
for (var i = 0; i < files.length; i++) {
    var file = files[i];
    // 判断是文件还是文件目录
    if (file.isDirectory()) {
        // 处理文件目录
        let dirName = file.getName();
        let dirPath = file.getAbsolutePath();
        if (/^\./.test(dirName)) continue;

    } else {
        // 处理文件
        let fileName = file.getName(); // 文件(文件夹)名
        let fileSize = file.length();  // 文件大小
        let filePath = file.getAbsolutePath();  // 文件路径

        if (/^\./.test(fileName)) continue;
    }
}