文件选择器

需求:

根据文件类型显示系统文件列表

工具类:

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);

 

posted @ 2017-01-06 13:53  嘉禾世兴  阅读(353)  评论(0编辑  收藏  举报