如何读取U盘中所有文件信息
·
1、关键字
fileAccess;U盘;获取所有文件信息
2、需求背景
在使用外接U盘设备传输文件时,需要读取到U盘中文件信息。
3、实现步骤
-
通过fileAccess创建createFileAccessHelper;
let fileAccessHelper = fileAccess.createFileAccessHelper(getContext());
-
通过createFileAccessHelper获取根元素,对根目录下元素进行遍历;
fileAccessHelper.getRoots() .then((roots) => { console.info(TAG, `getRoots success`); if(roots) { // 遍历根节点目录 let isRootsDone = false; while(!isRootsDone){ let rootsData = roots.next(); isRootsDone = rootsData.done; let rootInfo = rootsData.value; console.info(TAG, `rootsData: 'deviceType': ${JSON.stringify(rootInfo.deviceType)}, 'name': ${JSON.stringify(rootInfo.displayName)}, 'done': ${JSON.stringify(rootsData.done)}`); // 选择deviceType = 6 (选择USB文件) if (rootInfo && rootInfo.deviceType == 6) { let isFileDone = false; let fileIterator = rootInfo.listFile(); // 定义一个list接收root下所有文件(包含文件夹) let fileList: fileAccess.FileInfo[] = []; while (!isFileDone) { let fileData = fileIterator.next(); isFileDone = fileData.done; if (!isFileDone) { fileList.push(fileData.value); } } console.info(TAG, `file list length: ${fileList.length}`); // 迭代遍历 this.LoopDir(fileList); } } } }) .then((err) => { console.info(TAG, `getRoots fail, err: ${JSON.stringify(err)}`); })
-
判断文件是文件 or 文件夹
// 通过fileAccess.FileInfo中的mode属性进行文件类型判断 isFile(mode: number) { return (mode & fileExtensionInfo.DocumentFlag.REPRESENTS_FILE) == fileExtensionInfo.DocumentFlag.REPRESENTS_FILE; }
-
递归遍历根目录下所有文件/文件夹
LoopDir(fileInfoList: fileAccess.FileInfo[]) { // 循环list中每个元素 for (let i = 0; i < fileInfoList.length; i++) { console.info(TAG, `ergodicDir enter count: ${i}`); let fileInfo: fileAccess.FileInfo = fileInfoList[i]; // 判断当前文件是文件 or 文件夹 if (this.isFile(fileInfo.mode)) { // 如果是文件,进入业务逻辑处理;可通过createFileAccessHelper.openFile()获取文件的fd console.info(TAG, `ergodicDir fileInfo: ${JSON.stringify(fileInfo.uri)}; ${JSON.stringify(fileInfo.fileName)}`); } else { let iterator = fileInfo.listFile(); let isDone = false; // 如果是文件夹,再进行节点迭代(类似于将当前文件当做新的root) let tempList: fileAccess.FileInfo[] = []; while (!isDone) { let fileData = iterator.next(); isDone = fileData.done; if (!isDone) { tempList.push(fileData.value); } } // 继续使用递归方式进行文件下元素迭代 this.LoopDir(tempList); } } }
相关文档
更多推荐
所有评论(0)