首先说一下这个文件浏览的简单实现原理:
首先选择一个目录做为根目录(多为手机SD根目录),然后打开此目录,常用的就是使用File这个类了,如下:
File file=new File(path);
然后可以通过获取到此目录下所有文件及文件夹的列表:
File[] files = file.listFiles();
然后再根据根据得到的文件,来判断是文件夹还是文件,如果是文件夹,那么我们就将文件夹添加到列表中,如果是文件那么就把文件添加到列表中进行显示。
如果需要显示图标的话,那么就需要根据文件的后缀,设置不同的图标了。
基本代码如下:
for (File currentFile : files)
{
//判断是一个文件夹还是一个文件
if (currentFile.isDirectory())
{
currentIcon =getResources().getDrawable(R.drawable.folder);
}
else
{
//取得文件名
String fileName =currentFile.getName();
//根据文件名来判断文件类型,设置不同的图标
if(checkEndsWithInStringArray(fileName,getResources().getStringArray(R.array.fileEndingImage)))
{
currentIcon =getResources().getDrawable(R.drawable.image);
}
else if(checkEndsWithInStringArray(fileName,getResources().getStringArray(R.array.fileEndingWebText)))
{
currentIcon =getResources().getDrawable(R.drawable.webtext);
}
else if(checkEndsWithInStringArray(fileName,getResources().getStringArray(R.array.fileEndingPackage)))
{
currentIcon =getResources().getDrawable(R.drawable.packed);
}
else if (checkEndsWithInStringArray(fileName,getResources().getStringArray(R.array.fileEndingAudio)))
{
currentIcon =getResources().getDrawable(R.drawable.audio);
}
else if(checkEndsWithInStringArray(fileName,getResources().getStringArray(R.array.fileEndingVideo)))
{
currentIcon =getResources().getDrawable(R.drawable.video);
}
else
{
currentIcon = getResources().getDrawable(R.drawable.text);
}
}
下面是根据后缀对文件的类型进行的判断:
//通过文件名判断是什么类型的文件
private boolean checkEndsWithInStringArray(String checkItsEnd,
String[] fileEndings)
{
for(String aEnd : fileEndings)
{
if(checkItsEnd.endsWith(aEnd))
return true;
}
return false;
}
再贴一段自己的代码,获取SD卡文件名
private void initData() {
// 判断是否有外存储设备
if(Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
File path = Environment.getExternalStorageDirectory();
File file = new File(path.getPath());
File[] files = file.listFiles();
getFileName(files);
}
}
private void getFileName(File[] files) {
for(File currentFile : files) {
//判断是一个文件夹还是一个文件
if(currentFile.isDirectory()) {
getFileName(currentFile.listFiles());
}else {
// 取得文件名
String fileName = currentFile.getName();
// 获取.info后缀的文件
if (fileName.endsWith(".info"))
// 保存去掉后缀的文件名
names.add(fileName.substring(0, fileName.lastIndexOf(".")));
}
}
}
最后,展示在组件(如、ListView、GridView)就行了。