GitHub: github.com/DWL716/unia…
在通过uniapp开发移动端App时候有个需求需要获取手机目录文件列表和微信聊天记录的PDF、Word等聊天文件
但是发现uniapp没有提供相应api,且通过 HTML5+ 的 plus.io.resolveLocalFileSystemURL 读取本地文件或获取文件列表会受限(安卓10+以上系统无法读取)
获取安卓手机目录文件列表有以下几种方法
- 使用 5+ 的 plus.io.resolveLocalFileSystemURL Api
- 安卓原生方法 File
- 可以通过打开安卓原生系统文件管理器
- 可以通过 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;
}
}