阅读更多

此案例主要是模仿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. Android系列教程之Android项目的目录结构
  2. spring for android
  3. Android中的资源与国际化!
  4. 在android market发布个人免费应用的步骤
  5. 教你用电脑从 Google Play 下载 Android(安卓)程序 apk 文件
  6. Android基于腾讯X5内核的WebView(超级浏览器)
  7. android加载网络图片(逐行扫描格式png图片)的一个bug
  8. 从零开始学android:Android中的基本控件(上)
  9. NPM 和webpack 的基础使用

随机推荐

  1. android - 为安全而设计 - 3 - 开发文档
  2. RelativeLayout布局用到的主要属性
  3. Android(安卓)Studio 单刷《第一行代码》
  4. android - 为安全而设计 - 3 - 开发文档
  5. RelativeLayout
  6. Android—最新版Android(安卓)studioSDK
  7. Android野史系列:3.利用Android(安卓)Stud
  8. (三)Android事件分发机制 - Activity篇
  9. Android中如何设置RadioButton在文字的右
  10. Android的简单介绍