文件选择器
需求:
根据文件类型显示系统文件列表
工具类:
import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.provider.MediaStore.Files;
import android.provider.MediaStore.Files.FileColumns;
import com.xuehu365.xuehu.model.FileTypeDetail;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Administrator on 2017/1/18.
*/
public class MyFileUtils {
public static List<FileTypeDetail> getSpecificTypeOfFile(Context context, String[] extension, String fileType) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
List<FileTypeDetail> list = new ArrayList<>();
//从外存中获取
Uri fileUri = Files.getContentUri("external");
//筛选列,这里只筛选了:文件路径和不含后缀的文件名
String[] projection = new String[]{
FileColumns.DATA,
FileColumns.TITLE,
FileColumns.DATE_MODIFIED,
FileColumns.SIZE
};
//构造筛选语句
String selection = "";
for (int i = 0; i < extension.length; i++) {
if (i != 0) {
selection = selection + " OR ";
}
selection = selection + FileColumns.DATA + " LIKE '%" + extension[i] + "'";
}
//按时间递增顺序对结果进行排序;待会从后往前移动游标就可实现时间递减
String sortOrder = FileColumns.DATE_MODIFIED;
//获取内容解析器对象
ContentResolver resolver = context.getContentResolver();
//获取游标
Cursor cursor = resolver.query(fileUri, projection, selection, null, sortOrder);
if (cursor == null)
return null;
//游标从最后开始往前递减,以此实现时间递减顺序(最近访问的文件,优先显示)
if (cursor.moveToLast()) {
do {
//输出文件的完整路径
String path = cursor.getString(0);
String name = cursor.getString(0).substring(cursor.getString(0).lastIndexOf("/") + 1);
String time = format.format((new Long(cursor.getString(2))) * 1000);
String size = getSize(new Long(cursor.getString(3)));
FileTypeDetail detail = new FileTypeDetail(path, name, time, size, fileType);
list.add(detail);
} while (cursor.moveToPrevious());
}
cursor.close();
return list;
}
public static String getSize(long size) {
long kb = size / 1024;
if (kb > 0) {
long m = kb / 1024;
if (m > 0) {
return m + "M";
} else {
return kb + "KB";
}
} else {
return size + "B";
}
}
}
然后调用即可
list = MyFileUtils.getSpecificTypeOfFile(MainActivity.this, new String[]{".doc", ".ppt"});
adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, list);
lv.setAdapter(adapter);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现