文档章节

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

切切歆语
 切切歆语
发布于 2017/01/06 15:33
字数 589
阅读 396
收藏 0

此案例主要是模仿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" />

源码点击下载

© 著作权归作者所有

切切歆语
粉丝 21
博文 345
码字总数 235421
作品 0
杭州
程序员
私信 提问
android用于打开各种文件的intent,包括以下文件PDF,PPT,WORD,EXCEL...

import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.net.Uri.Builder; import java.io.File; import android.content.Intent; //自定义a......

汤姆521
2012/10/22
379
0
在线文档转换接口 word,excel,ppt等在线文件转pdf、png

在线文档转换API提供word,excel,ppt等在线文件转pdf、png等,文档:https://www.juhe.cn/docs/api/... 接口地址:http://v.juhe.cn/fileconvert/... 支持格式:json 请求方式:http get/post...

tinna
09/29
0
0
phonegap附件下载及打开附件

【原创】转载请注明出处! 在开发web app并且使用phonegap的情况下,附件下载着实是一件令人头疼的事,什么window.open或者window.location.href在webview中都不起作用,网上查了许久,没有一...

bluecoffee
2013/10/17
10K
8
让您的手机、平板电脑实现移动办公

金软OfficePro-浏览版是北京红樱枫软件有限公司推出的、运行于 Android 手机、平板电脑上的全功能办公软件,支持各种常用Office文档浏览,支持手写批注、语音朗读、中英文自动翻译、网络打印...

hyfsoft
2014/07/30
0
0
五款免费pdf转换成word软件下载

原文链接:http://www.wordlm.com/html/1711.html

liangxiaowei66
2014/05/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

教你玩转Linux—添加批量用户

添加和删除用户对每位Linux系统管理员都是轻而易举的事,比较棘手的是如果要添加几十个、上百个甚至上千个用户时,我们不太可能还使用useradd一个一个地添加,必然要找一种简便的创建大量用户...

xiangyunyan
15分钟前
3
0
返回提示信息,如:xxx创建成功!

【服务端】在输出的方法块中,加入要输出的字段(qcm_batch_id) QCMUserType.cs: public struct QCM_Custom_Create_Batch_Out_Tag { public BASCoreType.Cmn_Out_T......

_Somuns
15分钟前
3
0
Aliyun Serverless VSCode Extension v1.12.0 发布

Aliyun Serverless VSCode Extension 是阿里云 Serverless 产品 函数计算 Function Compute 的 VSCode 插件,该插件结合了函数计算 Fun 工具以及函数计算 SDK ,是一款 VSCode 图形化开发调试...

阿里云官方博客
16分钟前
4
0
程序员如何培养解决复杂问题的能力?

今天在上网时候,突然看到了这篇文章,感觉非常的适合现在的自己去思考下,可能也适用在座的读者。程序员不仅仅是敲代码,更是一个复合能力的结合体,也不仅仅停留在技术和代码阶段。你想要成...

哥本哈根的小哥
19分钟前
6
0
市场变化驱动产品思维升级

宜信科技中心财富管理产品部负责人Bob,与大家一起聊聊个性化推荐产品功能的设计和B端产品的功能策划方式。 拓展阅读:回归架构本质,重新理解微服务 智慧金融时代,大数据和AI如何为业务赋能...

宜信技术学院
20分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部