Android遍历获取Office格式(Word,Excel,PPT,PDF)的文件并打开

此案例主要是模仿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<AddFileInfo> list=new ArrayList<AddFileInfo>();
    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<str.length;i++)
            {
                File f = new File(str[i]);
                if(f.exists()) {
                    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());
                        fileDate += f.getAbsolutePath() + ",";
                        list.add(info);
                    } catch (Exception e) {
                        return;
                    }
                }
            }
        }
        mListview.setOnItemClickListener(onItemClickListener);
        mListview.setAdapter(adapter);
    }

    AdapterView.OnItemClickListener onItemClickListener=new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> 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加权限哦!

 <!-- SD卡权限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
 
posted @ 2017-01-06 15:31  切切歆语  阅读(672)  评论(0编辑  收藏  举报