阅读更多

此案例主要是模仿QQ加载WPS(Word,Excel,PPT)本地文件可打开查看,使用ListView加载,使用线程扫描SD卡下所有目录加载指定的Word,Excel,PPT等格式的文件,ListView列表显示,点击Item则调用系统应用打开。

效果图:

         

代码:

 

public class MainActivity extends AppCompatActivity {    public ProgressDialog dialog;    private ListView mListview;    private Context context;    private List list=new ArrayList();    private String filePath = Environment.getExternalStorageDirectory().toString() + File.separator;    private static Adapter adapter;    private ACache aCache;    private String fileDate="";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mListview=(ListView) findViewById(R.id.listview);        context=this;        aCache=ACache.get(this);        onLoad();    }    public void onLoad() {        adapter=new Adapter(MainActivity.this);        String string=aCache.getAsString("file");        if(string==null)        {            showProgress();            new MyThread().start();        }else{            String[] str=string.split(",");            for (int i=0;i parent, View view, int position, long id) {            startActivity(OpenFile.openFile(list.get(position).getPath()));        }    };    public class MyThread extends Thread {        @Override        public void run() {            super.run();            try {                doSearch(filePath);                Thread.sleep(2000);                Message msg=new Message();                msg.what=1;                msg.obj=1;                handler.sendMessage(msg);            } catch (InterruptedException e) {                e.printStackTrace();            }        }    }    Handler handler=new Handler(){        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            if(msg.what==1){                dismissProgress();                adapter.notifyDataSetChanged();                aCache.put("file",fileDate.substring(0,(fileDate.length()-1)),600);            }        }    };    /****     *计算文件大小     * @param length     * @return     */    public static String ShowLongFileSzie(Long length)    {        if(length>=1048576)        {            return (length/1048576)+"MB";        }        else if(length>=1024)        {            return (length/1024)+"KB";        }        else if(length<1024) {            return length + "B";        }else{            return "0KB";        }    }    /****     * 递归算法获取本地文件     * @param path     */    private void doSearch( String path) {        File file = new File(path);        if (file.exists()) {            if (file.isDirectory()) {                File[] fileArray = file.listFiles();                for (File f : fileArray) {                    if (f.isDirectory()) {                        doSearch(f.getPath());                    }                    else {                        if(f.getName().endsWith(".ppt") || f.getName().endsWith(".pptx") || f.getName().endsWith(".docx")                                || f.getName().endsWith(".xls") || f.getName().endsWith(".doc"))                        {                            FileInputStream fis = null;                            try {                                fis = new FileInputStream(f);                                String time=new SimpleDateFormat("yyyy-MM-dd").format(new Date(f.lastModified()));                                AddFileInfo  info=new AddFileInfo(f.getName(),Long.valueOf(fis.available()),time,false,f.getAbsolutePath());                                list.add(info);                                fileDate += f.getAbsolutePath() + ",";                                System.out.println("文件名称:" + f.getName());                                System.out.println("文件是否存在:" + f.exists());                                System.out.println("文件的相对路径:" + f.getPath());                                System.out.println("文件的绝对路径:" + f.getAbsolutePath());                                System.out.println("文件可以读取:" + f.canRead());                                System.out.println("文件可以写入:" + f.canWrite());                                System.out.println("文件上级路径:" + f.getParent());                                System.out.println("文件大小:" + f.length() + "B");                                System.out.println("文件最后修改时间:" + new Date(f.lastModified()));                                System.out.println("是否是文件类型:" + f.isFile());                                System.out.println("是否是文件夹类型:" + f.isDirectory());                            } catch (Exception e) {                                e.printStackTrace();                            }                        }                    }                }            }        }    } /***     * 启动     */    public void showProgress()    {        if(dialog==null)        {            dialog=new ProgressDialog(MainActivity.this);        }        dialog.showMessage("正在加载");    }    /***     * 关闭     */    public void  dismissProgress()    {        if(dialog==null)        {            dialog=new ProgressDialog(this);        }        dialog.dismiss();    }    @Override    protected void onDestroy() {        super.onDestroy();    }}

 

 

不要忘记在AndroidManifest.xml加权限哦!

 

        

 

 

源码点击下载

 

 

更多相关文章

  1. Mac上非常好用的免费的Android文件传输工具
  2. Android使用xutils3框架实现应用程序内的检查更新下载服务器存放
  3. Android 9 网络适配 (系统造成App内图片无法加载解决方案)
  4. android——再谈加载大量图片性能问题
  5. Android清单文件详解(一) ---- 一切从开始
  6. android: 静态XML和动态加载XML混合使用,以及重写Layout控件
  7. Android Studio SDK版本兼容问题,拷贝的Android包文件报错
  8. Android工程源文件结构

随机推荐

  1. Android消息机制-深入理解消息队列的工作
  2. Android通讯录管理(获取联系人、通话记录
  3. Android获取手机中外置内存卡、内置内存
  4. Android中的广播(BroadCast)详细介绍
  5. 史上最全:Android开发者必知的开发资源 (图
  6. [置顶] android listview仿iphone弹簧特
  7. LiAnLab开幕
  8. 77% 的 Android 手机已换上 Eclair 或 Fr
  9. 几种Android应用支付方式
  10. [Android Pro] android root权限破解分析