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