博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android SD卡浏览器
阅读量:4507 次
发布时间:2019-06-08

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

设计思路:

1.首先得到sd卡目录,如果sd卡存在就把sd卡根目录下的文件和文件夹显示在listview中,

2.定义两个button,一个用于返回根目录,一个用于返回上一层,

3.对listview位置进行监听,如果是文件则提示打不开,如果是文件夹就进入下个目录,得到下个目录底下的文件和文件夹,刷新listview

代码:

View Code
1 package cn.shaoyangjiang.com;   2 import java.io.File;   3 import java.text.SimpleDateFormat;   4 import java.util.ArrayList;   5 import java.util.Date;   6 import java.util.HashMap;   7 import java.util.List;   8 import java.util.Map;   9  10 import android.app.Activity;  11 import android.os.Bundle;  12 import android.view.View;  13 import android.widget.AdapterView;  14 import android.widget.AdapterView.OnItemClickListener;  15 import android.widget.Button;  16 import android.widget.ListView;  17 import android.widget.SimpleAdapter;  18 import android.widget.TextView;  19 import android.widget.Toast;  20  21 public class WJActivity extends Activity {
22 23 private TextView tvpath; 24 private ListView lvFiles; 25 private Button btnParent; 26 private Button btRoot; 27 28 // 记录当前的父文件夹 29 File currentParent; 30 File root; 31 // 记录当前路径下的所有文件夹的文件数组 32 File[] currentFiles; 33 34 public void onCreate(Bundle savedInstanceState) {
35 super.onCreate(savedInstanceState); 36 setContentView(R.layout.main); 37 38 lvFiles = (ListView) this.findViewById(R.id.files); 39 tvpath = (TextView) this.findViewById(R.id.tvpath); 40 btnParent = (Button) this.findViewById(R.id.btnParent); 41 btRoot = (Button) this.findViewById(R.id.btRoot); 42 43 // 获取系统的SDCard的目录 44 root = new File("/mnt/sdcard/"); 45 // 如果SD卡存在的话 46 if (root.exists()) {
47 48 currentParent = root; 49 currentFiles = root.listFiles(); 50 // 使用当前目录下的全部文件、文件夹来填充ListView 51 inflateListView(currentFiles); 52 53 } 54 55 lvFiles.setOnItemClickListener(new OnItemClickListener() {
56 @Override 57 public void onItemClick(AdapterView
adapterView, View view, 58 int position, long id) {
59 // 如果用户单击了文件,直接返回,不做任何处理 60 if (currentFiles[position].isFile()) {
61 // 也可自定义扩展打开这个文件等 62 Toast.makeText(WJActivity.this, 63 "文件打不开的", Toast.LENGTH_LONG).show(); 64 return; 65 } 66 // 获取用户点击的文件夹 下的所有文件 67 File[] tem = currentFiles[position].listFiles(); 68 if (tem == null || tem.length == 0) {
69 70 Toast.makeText(WJActivity.this, 71 "当前路径不可访问或者该路径下没有文件", Toast.LENGTH_LONG).show(); 72 } else {
73 // 获取用户单击的列表项对应的文件夹,设为当前的父文件夹 74 currentParent = currentFiles[position]; 75 // 保存当前的父文件夹内的全部文件和文件夹 76 currentFiles = tem; 77 // 再次更新ListView 78 inflateListView(currentFiles); 79 } 80 81 } 82 }); 83 84 // 获取上一级目录 85 btnParent.setOnClickListener(new View.OnClickListener() {
86 87 @Override 88 public void onClick(View v) {
89 try {
90 91 if (!currentParent.getCanonicalPath().equals("/mnt/sdcard")) {
92 93 // 获取上一级目录 94 currentParent = currentParent.getParentFile(); 95 // 列出当前目录下的所有文件 96 currentFiles = currentParent.listFiles(); 97 // 再次更新ListView 98 inflateListView(currentFiles); 99 } 100 } catch (Exception e) {
101 // TODO: handle exception 102 } 103 104 } 105 }); 106 107 // 回到根目录 108 btRoot.setOnClickListener(new View.OnClickListener() {
109 110 @Override 111 public void onClick(View v) {
112 currentParent = root; 113 currentFiles = root.listFiles(); 114 // 使用当前目录下的全部文件、文件夹来填充ListView 115 inflateListView(currentFiles); 116 } 117 }); 118 119 } 120 121 /** 122 * 根据文件夹填充ListView 123 * 124 * @param files 125 */ 126 private void inflateListView(File[] files) {
127 128 List
> listItems = new ArrayList
>(); 129 130 for (int i = 0; i < files.length; i++) {
131 132 Map
listItem = new HashMap
(); 133 134 if (files[i].isDirectory()) { 135 // 如果是文件夹就显示的图片为文件夹的图片 136 listItem.put("icon", R.drawable.folder); 137 } else { 138 listItem.put("icon", R.drawable.file); 139 } 140 // 添加一个文件名称 141 listItem.put("filename", files[i].getName()); 142 143 File myFile = new File(files[i].getName()); 144 145 // 获取文件的最后修改日期 146 long modTime = myFile.lastModified(); 147 SimpleDateFormat dateFormat = new SimpleDateFormat( 148 "yyyy-MM-dd HH:mm:ss"); 149 System.out.println(dateFormat.format(new Date(modTime))); 150 151 // 添加一个最后修改日期 152 listItem.put("modify", 153 "修改日期:" + dateFormat.format(new Date(modTime))); 154 155 listItems.add(listItem); 156 157 } 158 159 // 定义一个SimpleAdapter 160 SimpleAdapter adapter = new SimpleAdapter( 161 WJActivity.this, listItems, R.layout.list_item, 162 new String[] { "filename", "icon", "modify" }, new int[] { 163 R.id.file_name, R.id.icon, R.id.file_modify }); 164 165 // 填充数据集 166 lvFiles.setAdapter(adapter); 167 168 try { 169 tvpath.setText("当前路径为:" + currentParent.getCanonicalPath()); 170 } catch (Exception e) { 171 e.printStackTrace(); 172 } 173 174 } 175 }

布局文件:

View Code
1 
2
6
14
19
25 26
30
31

listview布局

View Code
1 
2
7
12
16
22
28
29 30

效果图:

转载于:https://www.cnblogs.com/shaoyangjiang/archive/2012/03/13/2394065.html

你可能感兴趣的文章
js 冒泡事件与解决冒泡事件
查看>>
2018-2019赛季多校联合新生训练赛第七场(2018/12/16)补题题解
查看>>
后台全选功能以及数据的提交方法
查看>>
Android 动画效果 及 自定义动画
查看>>
const与#define相比有什么不同?
查看>>
Eclipse4.7 SpringIDE插件的安装
查看>>
C#面向对象基础
查看>>
adb server is out of date. killing...
查看>>
Jquery页面加载效果
查看>>
ios对new Date() 的兼容问题
查看>>
Spark发展现状与战线
查看>>
Charles常用设置
查看>>
filebeat
查看>>
如何在Bitmap中画图?(MFC)
查看>>
Windows 用来定位 DLL 的搜索路径
查看>>
常见的游戏设计技术
查看>>
Backbone 学习笔记五
查看>>
R语言:各种零碎
查看>>
Mysql5.7修改root密码
查看>>
docker入门3:基础操作(2)
查看>>