博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android遍历获取Office格式(Word,Excel,PPT,PDF)的文件并打开
阅读量:6505 次
发布时间:2019-06-24

本文共 5315 字,大约阅读时间需要 17 分钟。

  hot3.png

此案例主要是模仿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加权限哦!

转载于:https://my.oschina.net/zhangqie/blog/820001

你可能感兴趣的文章
物联网操作系统已现中国时机
查看>>
Eclipse下使用Subversion =subclipse
查看>>
架构语言ArchiMate - ArchiMate提供的基本视角(Viewpoints)介绍二
查看>>
警告okyep之辈,我要让你们抱憾终生
查看>>
SCCM2012之部署安装
查看>>
.NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
查看>>
配套自测连载(五)
查看>>
大型企业网络配置系列课程详解(六) --PPP链路的配置与相关概念的理解
查看>>
nginx lua redis解决saltstack下发传输文件慢的问题思路
查看>>
基于嵌入式操作系统VxWorks的多任务并发程序设计(4)――任务间通信B
查看>>
SharePoint 2010 服务应用程序(Service Application)架构(1)
查看>>
JDBC+Servlet+JSP整合开发之25.JSP动作元素
查看>>
烂泥:rsync与inotify集成实现数据实时同步更新
查看>>
go语言笔记——go环境变量goroot是安装了路径和gopath是三方包路径
查看>>
数据操作类 SQLHelper.cs
查看>>
黑客讲故事:攻下隔壁女生路由器后,我都做了些什么【转】
查看>>
JAVA 设计模式 模板方法模式
查看>>
【MySQL使用技巧】JDBC连接
查看>>
HTML5边玩边学(9):俄罗斯方块就是这么简单 之 数据模型篇
查看>>
Linux输入子系统:多点触控协议 -- multi-touch-protocol.txt【转】
查看>>