public
class
SDFileExplorer
extends
Activity {
private
TextView
text
;
private
ListView
listView
;
Button
parentBtn
;
private
File
currentFile
;
// 记录当前的父文件夹
private
File[]
currentFiles
;
// 记录当前文件下所有的文件数组
boolean
hasSDcard
;
// 是否有内存卡
File
sdPath
;
// 得到内存卡的路径
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.
activity_sdfile_explorer
);
initUI();
// 初始化UI
onclick();
}
private
void
initUI() {
text
= (TextView) findViewById(R.id.
file_path
);
listView
= (ListView) findViewById(R.id.
file_list
);
parentBtn
= (Button) findViewById(R.id.
parent
);
hasSDcard
= Environment.getExternalStorageState().equals(
Environment.
MEDIA_MOUNTED
);
sdPath
= Environment.getExternalStorageDirectory();
// 第一次的时候判断如果有内存卡、那么父类为 sd卡、文件夹数组为SD卡下的所有文件
if
(
hasSDcard
) {
currentFile
=
sdPath
;
currentFiles
=
currentFile
.listFiles();
inflateListView(
currentFiles
);
}
}
private
void
onclick() {
listView
.setOnItemClickListener(
new
OnItemClickListener() {
@Override
public
void
onItemClick(AdapterView<?> parent, View view,
int
position,
long
id) {
if
(
currentFiles
[position].isFile())
return
;
// 获取用户点击的文件夹下的所有文件
File[] temp =
currentFiles
[position].listFiles();
if
(temp ==
null
|| temp.
length
== 0) {
Toast. makeText(SDFileExplorer.
this
,
"当前路径不可访问或该路径下没有文件"
,
20000).show();
}
else
{
// 用户当前点击的列表项作为父文件夹
currentFile
=
currentFiles
[position];
// 保存当前文件夹下内的全部文件和文件夹
currentFiles
= temp;
// 更新ListView
inflateListView(
currentFiles
);
}
}
});
// 获取上一级目录的按钮
parentBtn
.setOnClickListener(
new
OnClickListener() {
@Override
public
void
onClick(View v) {
try
{
if
(!
currentFile
.getCanonicalFile().equals(
sdPath
)) {
// 获取上一级目录
currentFile
=
currentFile
.getParentFile();
// 列出当前文件夹下的所有文件
currentFiles
=
currentFile
.listFiles();
inflateListView(
currentFiles
);
}
}
catch
(IOException e) {
//
TODO
Auto-generated catch block
e.printStackTrace();
}
}
});
}
private
void
inflateListView(File[] files) {
List<Map<String, Object>> list =
new
ArrayList<Map<String, Object>>();
for
(
int
i = 0; i < files.
length
; i++) {
Map<String, Object> map =
new
HashMap<String, Object>();
// 如果当前File是文件夹,使用folder图标、否则是file图标
if
(files[i].isDirectory()) {
map.put(
"icon"
, R.drawable.
folder
);
}
else
{
map.put(
"icon"
, R.drawable.
file
);
}
map.put(
"fileName"
, files[i].getName());
list.add(map);
}
// 添加适配为ListView
SimpleAdapter adapter =
new
SimpleAdapter(getApplicationContext(),
list, R.layout.
line
,
new
String[] {
"icon"
,
"fileName"
},
new
int
[] { R.id.
icon
, R.id.
file_name
});
listView
.setAdapter(adapter);
try
{
text
.setText(
"当前路径为:"
+
currentFile
.getCanonicalPath());
}
catch
(IOException e) {
e.printStackTrace();
}
}
}