文件选择器
需求:
根据文件类型显示系统文件列表
工具类:
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);