FileOperator
- 🚀
Android文件操作库 - 🚀适用于
Android 4.4及以上系统, 已兼容AndroidQ和Android11新的存储策略 - 🚀
Kotlin和Java案例 👉 app & sample_java
使用(Usage)
1. Project build.gradle:
repositories {
maven { url 'https://dl.bintray.com/javakam/FileOperator' }
}
2. 依赖(dependencies)
implementation 'ando.file:core:1.3.8' //核心库必选(Core library required)
implementation 'ando.file:selector:1.3.8' //文件选择器(File selector)
implementation 'ando.file:compressor:1.3.8' //图片压缩, 核心算法采用 Luban
implementation 'ando.file:android-q:1.3.8' //Q和11兼容库,需要额外的库:'androidx.documentfile:documentfile:1.0.1'
3. Application中初始化(Initialization in Application)
FileOperator.init(this,BuildConfig.DEBUG)
4. 混淆(Proguard)
未用到反射, 不需要混淆。(No reflection is used, no need to be confused.)
预览(Preview)
| 功能列表(Function list) | 缓存目录(Cache directory) |
|---|---|
![]() |
![]() |
文件选择(File selection)
| 单图+压缩(Single Image+Compress) | 多图+压缩(Multiple images+Compress) | 多文件+多类型(Multiple files+Multiple types) |
|---|---|---|
| [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ea1lNmng-1615774263638)(https://raw.githubusercontent.com/javakam/FileOperator/master/screenshot/pick1.png)] | [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FD2qhkGC-1615774263639)(https://raw.githubusercontent.com/javakam/FileOperator/master/screenshot/pick2.png)] | [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F8kEZuez-1615774263641)(https://raw.githubusercontent.com/javakam/FileOperator/master/screenshot/pick3.png)] |
用法(Usage)
1. 单选图片(Single selection picture)
val optionsImage = FileSelectOptions().apply {
fileType = FileType.IMAGE
fileTypeMismatchTip = "文件类型不匹配 !" //File type mismatch
singleFileMaxSize = 5242880
singleFileMaxSizeTip = "图片最大不超过5M !" //The largest picture does not exceed 5M
allFilesMaxSize = 10485760
allFilesMaxSizeTip = "总图片大小不超过10M !"//The total picture size does not exceed 10M 注:单选条件下无效,只做单个图片大小判断
fileCondition = object : FileSelectCondition {
override fun accept(fileType: IFileType, uri: Uri?): Boolean {
return (fileType == FileType.IMAGE && uri != null && !uri.path.isNullOrBlank() && !FileUtils.isGif(uri))
}
}
}
mFileSelector = FileSelector
.with(this)
.setRequestCode(REQUEST_CHOOSE_FILE)
.setTypeMismatchTip("文件类型不匹配 !") //File type mismatch
.setMinCount(1, "至少选择一个文件 !") //Choose at least one file
.setMaxCount(10, "最多选择十个文件 !") //Choose up to ten files 注:单选条件下无效, 只做最少数量判断
.setOverLimitStrategy(OVER_LIMIT_EXCEPT_OVERFLOW)
.setSingleFileMaxSize(1048576, "大小不能超过1M !") //The size cannot exceed 1M 注:单选条件下无效, FileSelectOptions.singleFileMaxSize
.setAllFilesMaxSize(10485760, "总大小不能超过10M !") //The total size cannot exceed 10M 注:单选条件下无效,只做单个图片大小判断 setSingleFileMaxSize
.setMimeTypes("image/*") //默认不做文件类型约束为"*/*",不同类型系统提供的选择UI不一样 eg:"video/*","audio/*","image/*"
.applyOptions(optionsImage)
.filter(object : FileSelectCondition {
override fun accept(fileType: IFileType, uri: Uri?): Boolean {
return when (fileType) {
FileType.IMAGE -> (uri != null && !uri.path.isNullOrBlank() && !FileUtils.isGif(uri))
FileType.VIDEO -> false
FileType.AUDIO -> false
else -> false
}
}
})
.callback(object : FileSelectCallBack {
override fun onSuccess(results: List<FileSelectResult>?) {
ResultUtils.resetUI(mTvResult)
if (results.isNullOrEmpty()) {
toastLong("没有选取文件") //No file selected
return
}
showSelectResult(results)
}
override fun onError(e: Throwable?) {
FileLogger.e("FileSelectCallBack onError ${
e?.message}")
ResultUtils.setErrorText(mTvError, e)
}
})
.choose()
2. 多选图片(多选+单一类型)
Multiple selection pictures (multiple selection + single type)
val optionsImage = FileSelectOptions().apply {
fileType = FileType.IMAGE
fileTypeMismatchTip = "文件类型不匹配 !" //File type mismatch
singleFileMaxSize = 5242880
singleFileMaxSizeTip = "单张图片大小不超过5M !" //The size of a single picture does not exceed 5M
allFilesMaxSize = 10485760
allFilesMaxSizeTip = "图片总大小不超过10M !" //The total size of the picture does not exceed 10M
fileCondition = object : FileSelectCondition {
override fun accept(fileType: IFileType, uri: Uri?): Boolean {
return (fileType == FileType.IMAGE && uri != null && !uri.path.isNullOrBlank() && !FileUtils.isGif(uri))
}
}
}
mFileSelector = FileSelector
.with(this)
.setRequestCode(REQUEST_CHOOSE_FILE)
.setMultiSelect()
.setMinCount(1, "至少选择一个文件 !") //Choose at least one file
.setMaxCount(2, "最多选两个文件!") //Choose up to two files
.setSingleFileMaxSize(3145728, "单个大小不能超过3M !") //Single size cannot exceed 3M
.setAllFilesMaxSize(20971520, "总文件大小不能超过20M !") //The total file size cannot exceed 20M
.setOverLimitStrategy(this.mOverLimitStrategy)
.setMimeTypes("image/*")
.applyOptions(optionsImage)
.filter(object : FileSelectCondition {
override fun accept(fileType: IFileType, uri: Uri?): Boolean {
return (fileType == FileType.IMAGE) && (uri != null && !uri.path.isNullOrBlank() && !FileUtils.isGif(uri))
}
})
.callback(object : FileSelectCallBack {
override fun onSuccess(results: List<FileSelectResult>?) {
FileLogger.w("FileSelectCallBack onSuccess ${
results?.size}")
mAdapter.setData(null)
if (results.isNullOrEmpty()) {
toastLong("没有选取文件") //No file selected
return
}
showSelectResult(results)
}
override fun onError(e: Throwable?) {
FileLogger.e("FileSelectCallBack onError ${
e?.message}")
ResultUtils.setErrorText(mTvError, e)
mAdapter.setData(null)
mBtSelect.text = "$mShowText (0)"
}
})
.choose()
3. 多选文件(多选+多种类型)
Multiple files (multi-select multiple types)
🌴适用于处理复杂文件选择情形, 如: 选取图片、音频文件、文本文件, 其中
图片至少选择一张, 最多选择两张, 每张图片大小不超过5M, 全部图片大小不超过10M;
音频文件至少选择两个, 最多选择三个, 每个音频大小不超过20M, 全部音频大小不超过30M;
文本文件至少选择一个, 最多选择两个, 每个文本文件大小不超过5M, 全部文本文件大小不超过10M
🌴It is suitable for processing complex f

FileOperator 是一个适用于 Android 4.4 及以上系统的文件操作库,兼容 AndroidQ 和 Android11 的存储策略。它提供了文件选择、图片压缩等功能,并支持多种类型的文件操作。库的使用包括添加依赖、初始化、设置文件选择条件和回调。通过示例代码展示了单选图片、多选图片和多选文件的实现,以及自定义文件类型和压缩图片的用法。此外,还提供了文件操作工具类,如计算文件大小、打开文件和URL等。更新日志中修复了若干问题,提高了兼容性和安全性。


最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



