• Home
Name Date Size #Lines LOC

..--

AppScope/16-Dec-2024-3633

Library/16-Dec-2024-1,044809

entry/16-Dec-2024-7,5697,116

hvigor/16-Dec-2024-88

lib/16-Dec-2024-

screenshots/16-Dec-2024-

.gitignoreD16-Dec-2024103 87

README_zh.mdD16-Dec-202414.9 KiB179139

build-profile.json5D16-Dec-20241.1 KiB4746

hvigorfile.jsD16-Dec-2024773 171

hvigorwD16-Dec-20242 KiB6228

hvigorw.batD16-Dec-20242 KiB7356

oh-package.json5D16-Dec-2024816 2625

ohosTest.mdD16-Dec-20248 KiB5855

README_zh.md

1# 文件管理
2
3### 介绍
4
5本示例主要展示了文件管理相关的功能,使用[@ohos.filemanagement.userFileManager](https://docs.openharmony.cn/pages/v4.1/zh-cn/application-dev/reference/apis-core-file-kit/js-apis-userFileManager-sys.md) 、[@ohos.file.fileAccess](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/apis/js-apis-fileAccess.md) 、[@ohos.fileio](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-core-file-kit/js-apis-fileio.md) 、[@ohos.file.fs](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-core-file-kit/js-apis-file-fs.md)、[@ohos.app.ability.contextConstant](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/apis/js-apis-app-ability-contextConstant.md)
6
7等接口,实现了增添文件、删除文件、查找指定类型文件文件、复制并移动文件、切换加密分区和预览图片、监听文件的功能;
8
9### 效果预览
10
11|首页|图片列表|图片预览|文档删除|加密分区|
12|--------------------------------|--------------------------------|--------------------------------|--------------------------------|--------------------------------|
13|![image](screenshots/main.png)|![image](screenshots/image_file_list.png)|![image](screenshots/image_preview.png)|![image](screenshots/document_list.png)|![image](screenshots/myPhone_home.png)|
14
15使用说明
161. 在主界面,可以点击图片、视频、文档、音频等按钮进入对应目录的文件列表浏览界面;
172. 在文档列表浏览界面,点击“+”按钮,可以添加文件;
183. 在文档列表浏览界面,长按列表项会出现删除图片,点击删除图标可以删除文件;
194. 在图片文件列表界面,点击图片可以进入图片预览界面。
205. 进入“我的手机”页面前应先安装[MyPhoneFilePage](./lib/MyPhoneFilePage-1.0.0.hap),在主页点击“我的手机”,进入应用沙箱目录下。
21   1. 列表的上方是默认的EL2加密分区的应用根目录下文件列表,点击下方两个按钮“data/app/el3”和“data/app/el4”分别进入EL3和EL4加密分区应用根目录,进入后对文件或文件夹操作与EL2加密分区相同。
22
23   2. 点击左下角“新建文件夹”按钮,在弹窗中输入文件夹名称,点击弹窗中的“确定”按钮,完成创建。
24
25   3. 点击新建的文件夹,进入目录,在新目录中点击左下角的“新建文件”,在弹窗的窗口中填写文件名称,然后点击确定,完成创建。
26
27   4. 点击右上角多选按钮,选择需要重命名的文件(仅选中一个文件时可用),点击重命名,在弹窗中修改文件名称,点击“确定”,完成修改。
28
29   5. 点击右上角多选按钮,选择需要复制和移动的文件(可多选,并且不可移动到本身的子目录下),选中后点击左下角“复制和移动”按钮,在页面中点击目标目录会进入该目录,在目标目录下点击“移动到这”按钮,完成文件复制和移动。
30
31   6. 点击右上角多选按钮,选择需要删除的文件,选中后点击右下角“更多”按钮,弹出的菜单中选择“删除”,在弹窗中点击“删除”,即可删除文件。
32
33   7. 点击右上角多选按钮,选择一项需要修改时间的文件,选中后点击右下角“更多”按钮,弹出的菜单中选择“修改文件(夹)时间”,在弹窗的文本框中输入要修改的时间,点击“确定”,即可修改文件(夹)时间。
34
35   8. 点击单个文件,可进入文件内容页面,点击右上角编辑按钮,进入编辑模式编辑、修改文件内容,然后点击右上角的保存按钮保存对文件的修改,点击左上角"X"按钮退出编辑模式,点击返回按钮返回上一页。
366. 在主页点击“监听文件”,进入文件监听页面。
37   1.  点击**添加监听**按钮,选择**IN_CREATE**监听,然后点击**确定**按钮,成功添加IN_CREATE监听。
38   2. 点击**添加**按钮,成功添加一个文件,触发事件后日志显示为相应日志:event:256,fileName为新增文件的路径。
39   3. 点击**停止监听**按钮,选择**IN_CREATE**监听,然后点击**确定**按钮,成功停止IN_CREATE监听。
40   4. 点击**添加**按钮,成功添加一个文件,触发事件后日志无变化。
41   5. 点击**添加监听**按钮,选择**IN_DELETE**监听,然后点击**确定**按钮,成功添加IN_DELETE监听。
42   6. 选择要删除的文件item,左滑后点击删除图标,成功删除一个文件,触发事件后日志显示为相应日志:event:512,fileName为删除文件的路径。
43   7. 点击**停止监听**按钮,选择**IN_DELETE**监听,然后点击**确定**按钮,成功停止IN_CREATE监听。
44   8. 选择要删除的文件item,左滑后点击删除图标,成功删除一个文件,触发事件后日志无变化。
45   9. 点击**添加监听**按钮,选择**IN_MODIFY**监听,然后点击**确定**按钮,成功添加IN_MODIFY监听。
46   10. 选择要编辑的文件item,左滑后点击编辑图标,进入文件编辑界面,修改文件名和文件内容,修改之后点击保存图标,页面显示的文件文件大小发生变化,然后点击返回图标后返回文件监听界面,查看触发事件后日志显示为相应日志:event:2,fileName为修改后文件的路径。IN_MODIFY监听只监听文件内容是否发生变化,若单独修改文件名,则不会更新监听日志。
47   11. 点击**停止监听**按钮,选择**IN_MODIFY**监听,然后点击**确定**按钮,成功停止IN_MODIFY监听。
48   12. 选择要编辑的文件item,左滑后点击编辑图标,进入文件编辑界面,修改文件名和文件内容,修改之后点击保存图标,页面显示的文件文件大小发生变化,然后点击返回图标后返回文件监听界面,查看触发事件后日志无变化。
49
50### 工程目录
51
52```
53entry/src/main/ets/
54|---Application
55|---common
56|   |---Common.ts             // 公用方法,如bufferToString
57|   |---Logger.ts             // 监听文件日志
58|---filemanager
59|   |---data
60|   |   |---DocumentDataSource.ets         // 懒加载数据格式
61|   |   |---FileDataSource.ets             // 懒加载数据格式
62|   |---fileFs
63|   |   |---MyWatcher.ts      // 预制10个文件进行监听,并对文件增删改进行处理,以及对添加watcher和删除watcher进行处理
64|   |---pages
65|   |   |---audio
66|   |   |   |---AudioFileList.ets          // 音频列表页面
67|   |   |---common
68|   |   |   |---FileList.ets               // 同类型文件列表展示页面,接收文件类型,展示特定类型的文件列表
69|   |   |---document
70|   |   |   |---DocumentFileList.ets       // 文档列表页面
71|   |   |   |---DocumentFileManager.ets    // 文档数据获取函数封装
72|   |   |---image
73|   |   |   |---ImageFileList.ets          // 图片列表页面
74|   |   |   |---ImagePreview.ets           // 图片预览页面
75|   |   |---MyPhone
76|   |   |   |---ChangeTimeDialog.ets       //修改时间的弹窗
77|   |   |   |---DeleteDialog.ets           // 删除时的询问弹窗
78|   |   |   |---InputNameDialog.ets        // 新增文件时的输入框
79|   |   |   |---MyPhone.ets                // MyPhone主页
80|   |   |   |---OpenFile.ets               // 文件内容查看编辑页面
81|   |   |---video
82|   |   |   |---VideoFileList.ets          // 视频列表页面
83|   |   |---FileManagerHome.ets            // 首页主体内容
84|---MainAbility
85|---pages
86|   |---WatcherFile.ets       // 监听文件页面,可对当前目录添加监听和停止监听,同时可以添加文件和删除文件并显示触发事件后日志
87|   |---Index.ets             // 首页
88|   |---EditFile.ets          // 文件编辑界面,可对文件名和文件内容进行修改,并可对文件的修改进行撤销
89Library/src/main/ets/
90|---filemanager
91|   |---components
92|   |   |---ThumbnailImage.ets             // 缩略图组件
93|   |---fileio
94|   |   |---FileIoManager.ts               // 文件管理模块,封装了fileio的接口,实现MyPhone部分的功能
95|   |---medialibrary
96|   |   |---MediaLibraryManager.ts         // 主要封装了mediaLibrary库相关的接口,实现相关功能,如:对文件的增、删、查和图片预览功能
97|   |---userfilemanager
98|   |   |---UserFileManager.ts             // 封装userFileManager库相关的接口
99|   |---FileManager.ts                     // 文件管理接口,统一封装了各模块对外提供的功能接口
100|---mock                                   // 本地数据
101|---utils                                  // 日志工具
102```
103
104### 具体实现:
105
106* 增添文件、删除文件、查找指定类型文件文件和预览图片的功能接口封装在MediaLibraryManager,源码参考:[MediaLibraryManager.ts](Library/src/main/ets/filemanager/medialibrary/MediaLibraryManager.ts)
107    * 使用userFileManager.getUserFileMgr来获取userFileManager对象;
108    * 读取每个文件的数据:使用userFileManager.getPhotoAssets读取满足条件的文图片视频以及音频集合FetchResult,然后调用FetchResult.getFirstObject();
109    * 创建模拟文件:如果是视频或图片文件,使用createPhotoAsset()创建,如果是音频文件,使用createAudioAsset()创建,如果是文档文件,则使用fileAccess中的createFile()创建;
110    * 删除指定路径的文件:使用userFileManager中的delete();
111    * 获取预览图:使用image.createImageSource()创建指定的文件资源ImageSource,然后调用ImageSource.createPixelMap(),接口参考:[@ohos.multimedia.image](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-image-kit/js-apis-image.md)112
113* MyPhone模块中的文件增删、复制移动、查找功能封装在FileSystem,源码参考:[FileIoManager.ets](Library/src/main/ets/filemanager/fileio/FileIoManager.ets) 。
114  * 读取文件列表:使用fileio.opendirSync()打开指定目录dir,然后使用dir.readSync()读取文件内容dirent,在调用dirent中相关api获取想要的文件参数;
115  * 创建目录:使用fileio.mkdirSync()创建文件夹;
116  * 创建文件:使用fileio.openSync()创建文件;
117  * 删除选中内容:使用fileio.rmdirSync()删除文件夹,使用fileio.unlinkSync()删除文件;
118  * 复制文件:使用fileio.copyFileSync()复制目标文件;
119  * 移动文件:使用fileio.mkdirSync()创建指定目录,再递归选中目录中的文件,将内部的文件创建到指定的位置。
120  * 修改加密分区:修改应用上下文Context的area,实现当前加密分区的修改。
121
122* 在Library模块中通过封装FileManager向外提供功能接口,如MediaLibraryManager.getPixelMapByFileAsset(),源码参考:[FileManager.ts](Library/src/main/ets/filemanager/FileManager.ts)
123    * 如效果预览中的**图片列表**,读取指定类型的文件:在[FileList.ets](entry/src/main/ets/filemanager/pages/common/FileList.ets)
124      中调用FileManager.getFileAssets();
125    * 创建模拟文件:在[FileList.ets](entry/src/main/ets/filemanager/pages/common/FileList.ets)
126      中调用FileManager.createTxtFileAsset();
127    * 删除指定路径的文件:在[FileList.ets](entry/src/main/ets/filemanager/pages/common/FileList.ets)
128      中调用FileManager.deleteFileAsset();
129    * 获取缩略图:在[ThumbnailImage.ets](Library/src/main/ets/filemanager/components/ThumbnailImage.ets) 中调用FileManager.getThumbnail();
130    * 如效果预览中的**图片预览**,获取预览图:在[ImagePreview.ets](entry/src/main/ets/filemanager/pages/image/ImagePreview.ets) 中调用FileManager.getPixelMapByFileAsset()。
131
132* 监听文件模块中的文件增删、查找、修改、监听功能封装在MyWatcher,源码参考:[MyWatcher.ts](ets/src/main/ets/filemanager/fileFs/MyWatcher.ts)
133
134    * 增加文件、删除文件、监听文件、停止监听文件:在[WatcherFile.ets](entry/src/main/ets/pages/WatcherFile.ets)
135      中调用MyWathcer.addFileToWatcher()、MyWathcer.deleteFileToWatcher()、MyWathcer.startWatcher(watcherName)、MyWathcer.stopWatcher();
136
137    * 修改文件:在[EditFile.ets](entry/src/main/ets/pages/EditFile.ets)
138
139      中调用MyWatcher.modifyFileToWatcher()。
140
141### 相关权限
142
143[ohos.permission.WRITE_IMAGEVIDEO](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/security/AccessToken/permissions-for-system-apps.md#ohospermissionwrite_imagevideo)
144
145[ohos.permission.READ_IMAGEVIDEO](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/security/AccessToken/permissions-for-system-apps.md#ohospermissionread_imagevideo)
146
147[ohos.permission.READ_AUDIO](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/security/AccessToken/permissions-for-system-apps.md#ohospermissionread_audio)
148
149[ohos.permission.WRITE_AUDIO](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/security/AccessToken/permissions-for-system-apps.md#ohospermissionwrite_audio)
150
151[ohos.permission.READ_WRITE_DOWNLOAD_DIRECTORY](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/security/AccessToken/permissions-for-system-apps.md#ohospermissionread_write_download_directory)
152
153[ohos.permission.GET_BUNDLE_INFO_PRIVILEGED](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/security/AccessToken/permissions-for-system-apps.md#ohospermissionget_bundle_info_privileged)
154
155[ohos.permission.FILE_ACCESS_MANAGER](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/security/AccessToken/permissions-for-system-apps.md#ohospermissionfile_access_manager)
156
157[ohos.permission.STORAGE_MANAGER](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/security/AccessToken/permissions-for-system-apps.md#ohospermissionstorage_manager)
158
159### 依赖
160
161不涉及
162
163### 约束与限制
164
1651. 本示例仅支持标准系统上运行,支持设备:RK3568;
1662. 本示例为Stage模型,仅支持API11版本SDK,SDK版本号(API Version 11 Beta),镜像版本号(4.1Beta)。
1673. 本示例需要使用DevEco Studio 版本号(4.0Release)版本才可编译运行。
1684. 本示例涉及调用系统权限的接口,需要配置允许权限列表,可以参考[特殊权限配置方法](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/security/hapsigntool-overview.md) ,在配置文件中的“allowed-acls”字段中增加"ohos.permission.FILE_ACCESS_MANAGER", "ohos.permission.STORAGE_MANAGER", "ohos.permission.WRITE_IMAGEVIDEO", "ohos.permission.READ_IMAGEVIDEO","ohos.permission.READ_AUDIO","ohos.permission.READ_WRITE_DOWNLOAD_DIRECTORY","ohos.permission.GET_BUNDLE_INFO_PRIVILEGED","ohos.permission.FILE_ACCESS_MANAGER","ohos.permission.WRITE_AUDIO"等权限。
169
170### 下载
171
172如需单独下载本工程,执行如下命令:
173
174    git init
175    git config core.sparsecheckout true
176    echo code/BasicFeature/FileManager/FileManager/ > .git/info/sparse-checkout
177    git remote add origin https://gitee.com/openharmony/applications_app_samples.git
178    git pull origin master
179