package lee.sdcard;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
public class MainActivity extends Activity {
private ListView listView; //文件目录ListView
private GridView toolbarGrid; //工具条
private TextView title; //标题-路径
private List fileName=null; //文件名称
private List fileNum=null; //记录文件大少或者有多少个子目录
private List filePath=null; //文件路径
private List isFile=null; //是否文件夹
private boolean flag = true;
private String sdCardPath; //SD卡根路径
private String parentPath; //路径的上级
/** 底部菜单图片 **/
int[] menu_toolbar_image_array = {
R.drawable.menu_paste,
R.drawable.controlbar_back,
R.drawable.menu_penselectmodel,
R.drawable.menu_quit };
/** 底部菜单文字 **/
String[] menu_toolbar_name_array = { "主目录", "返回", "确定", "退出" };
public void toast(String msg){
Toast.makeText(this, msg, 1).show();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
toast("Sd卡不存在");
}
sdCardPath=Environment.getExternalStorageDirectory().getPath();
// File fff=new File(sdCardPath+"/test/ddd");
// if(!fff.exists())fff.mkdirs();
listView=(ListView) findViewById(R.id.list_view);
title=(TextView) findViewById(R.id.title2);
getFileDir(sdCardPath);
// 创建底部菜单 Toolbar
toolbarGrid = (GridView) findViewById(R.id.filedir_toolbar); //获取底部的GridView控件
toolbarGrid.setNumColumns(4); // 设置每行列数
toolbarGrid.setAdapter(getMenuAdapter(menu_toolbar_name_array,menu_toolbar_image_array));// 设置菜单Adapter。调用getMenuAdapter方法构造MAP参数
/** 监听底部菜单选项 **/
toolbarGrid.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView arg0, View arg1, int arg2,long arg3) {
switch (arg2) {
case 0: //首页
getFileDir(sdCardPath);
break;
case 1: //返回
getFileDir(parentPath);
title.setText("路径:"+parentPath);
break;
case 2:
// TODO Auto-generated method stub
break;
case 3:
MainActivity.this.finish();
break;
}
}
});
}
/**
* 构造菜单Adapter
* @param menuNameArray 名称
* @param imageResourceArray 图片
* @return SimpleAdapter
*/
private SimpleAdapter getMenuAdapter(String[] menuNameArray,int[] imageResourceArray) {
ArrayList> data = new ArrayList>();
for (int i = 0; i < menuNameArray.length; i++) {
HashMap map = new HashMap();
map.put("itemImage", imageResourceArray[i]);
map.put("itemText", menuNameArray[i]);
data.add(map);
}
SimpleAdapter simperAdapter = new SimpleAdapter(
this, //上下文
data, //数据源
R.layout.item_menu, //绑定的视图
new String[] { "itemImage", "itemText" }, //绑定数据源对应的标题
new int[] { R.id.item_image, R.id.item_text }); //绑定视图对应的控件
return simperAdapter;
}
/**
* 获取路径的子目录列表
* @param path 路径
*/
private void getFileDir(String path) {
File f = new File(path); //建立文件
if(!path.equals(sdCardPath)){ //判断文件是否SD卡根路径
parentPath = f.getParent(); //如果不是根路径就获取该路径的上级路径
}else
parentPath = sdCardPath; //如果是根路径就
//初始化存放个数据的List
fileName = new ArrayList();
fileNum = new ArrayList();
filePath = new ArrayList();
isFile = new ArrayList();
File file=new File(path); //获取接收进来的路径
int fileSize = file.list().length; //获取路径一共有多少个子文件
//第一次遍历存放文件夹
for(int i=0;i< p>
File fileChild=new File(path, file.list()[i]); //定义子文件
if(fileChild.isDirectory() && !fileChild.isHidden()){ //判断子文件是否文件夹并且不是隐藏文件
fileName.add(fileChild.getName()); //获取子文件的名称
fileNum.add(String.valueOf(fileChild.list().length)+"个子文件"); //获取子文件里面有几个子文件
filePath.add(fileChild.getPath()); //获取子文件的路径
isFile.add(true); //标记是否文件夹
}
}
//第2次遍历放图片文件
for(int i=0;i< p>
File fileChild=new File(path, file.list()[i]);
if(fileChild.getName().endsWith(".jpg")){ //判断后缀是图片
fileName.add(fileChild.getName());
fileNum.add(String.valueOf(formatSize(fileChild.length()))); //格式化图片大少,显示KB/MB/GB
filePath.add(file.getPath());
isFile.add(false);
}
}
String[] str={"fileImage","fileName","isFileImage","fileNum","filePath"};
List> list =new ArrayList>();
for(int i=0;i< p>
Map map =new HashMap();
map.put("fileName", fileName.get(i));
map.put("filePath", filePath.get(i));
map.put("fileNum", fileNum.get(i));
//判断是文件夹还是图片,显示不同的图片
if(isFile.get(i)){
map.put("fileImage", R.drawable.image_folder);
map.put("isFileImage", R.drawable.list_icon);
}else if(fileName.get(i).endsWith(".jpg")){
map.put("fileImage", R.drawable.imagefile);
map.put("isFileImage", R.drawable.list_icon);
}
list.add(map);
}
SimpleAdapter adapter=new SimpleAdapter(MainActivity.this,
list,
R.layout.filedir_item,
str,
new int[]{R.id.item_image,R.id.item_name,R.id.item_icon,R.id.item_num});
listView.setAdapter(adapter);
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView parent, View view,int position, long id) {
Map map=(Map) parent.getItemAtPosition(position); // 获取点击的Item所绑定的数据
getFileDir(map.get("filePath").toString()); //获取点击文件夹路径
title.setText("路径:"+map.get("filePath").toString()); //设置标题文字
}
});
}
/**
* 格式化文件大少,显示KB/MB/GB
* @param size
* @return 返回格式化的字符串
*/
private String formatSize(long size) {
long SIZE_KB = 1024;
long SIZE_MB = SIZE_KB * 1024;
long SIZE_GB = SIZE_MB * 1024;
if(size < SIZE_KB) {
return String.format( "%d B" , (int) size);
} else if(size < SIZE_MB) {
return String.format( "%.2f KB" , (float)size / SIZE_KB);
} else if(size < SIZE_GB) {
return String.format( "%.2f MB" , (float)size / SIZE_MB);
} else {
return String.format( "%.2f GB" , (float)size / SIZE_GB);
}
}
// @Override
// public boolean onKeyDown(int keyCode, KeyEvent event) {
// if(keyCode==KeyEvent.KEYCODE_BACK){
// if(parentPath!=null)
// getFileDir(parentPath);
// return true;
// }
//
//
// return super.onKeyDown(keyCode, event);
// }
}
分享到:
相关推荐
在Android操作系统中,SD卡作为扩展存储空间,常常存储着大量的用户数据,包括照片、音乐、文档等。为了方便用户管理和访问这些文件,Android SD卡文件浏览器应运而生。本文将深入探讨这一主题,包括其工作原理、...
在Android系统中,SD卡(Secure Digital Card)是设备存储扩展和数据交换的重要媒介,它为应用程序提供了额外的存储空间,以保存用户数据、媒体文件或其他应用相关资源。本篇文章将详细探讨Android平台上SD卡的文件...
这个"Android sd卡音频文件列表显示+歌曲播放"的Demo就是为此目的设计的。它结合了文件系统操作、UI设计以及媒体播放技术,是Android应用开发中的一个重要实践。 首先,我们来探讨如何获取SD卡上的音乐文件列表。在...
总之,Android平台通过一系列API提供了对SD卡文件的访问能力,开发者可以通过编程实现文件浏览功能,为用户提供查看和管理SD卡上文件的便利。在实际开发中,要确保遵循权限管理和最佳实践,以确保应用的兼容性和安全...
在Android 6.0(API级别23)之前,应用程序默认拥有读写外部存储(如SD卡)的权限。但从Android 6.0开始,应用需要在运行时请求`WRITE_EXTERNAL_STORAGE`和`READ_EXTERNAL_STORAGE`权限。用户可以在应用的设置中给予...
1. **文件系统访问**:Android设备上的外部存储(通常称为SD卡)被模拟为一个文件系统,可以使用Java的`java.io.File`类来操作。首先,你需要获取SD卡的根目录路径,通常是`Environment.getExternalStorageDirectory...
在使用SD卡存储时,需要注意权限问题。自Android 6.0(API级别23)以来,应用需要在运行时请求`WRITE_EXTERNAL_STORAGE`和`READ_EXTERNAL_STORAGE`权限。 **2. data下文件存储** 内部data目录下的文件存储主要用于...
### Android读取SD卡中音乐文件列表 在Android开发中,常常需要实现的功能之一就是读取设备中的音乐文件。这通常用于音乐播放器类的应用程序,以便用户可以浏览并选择他们想要播放的歌曲。本文将详细介绍如何通过...
遍历SD卡(通常指的是外部存储空间)上的所有视频文件,可以使用递归的方式来实现。从根目录开始,逐个检查每个文件是否为视频文件。可以通过文件的扩展名来判断,常见的视频格式有.mp4、.avi、.mkv、.wmv等。以下是...
在Android平台上,播放SD卡中的视频文件是一项常见的需求,尤其对于多媒体应用来说更是必不可少。本文将详细介绍如何实现在Android应用中浏览并播放SD卡上的视频文件。我们将主要围绕以下几个方面展开: 1. **...
在Android系统中,读取和存储SD卡是应用程序与外部存储交互的重要部分,尤其是在处理大量数据或者需要离线可用内容时。本示例项目“StorageManageDemo”将帮助开发者了解如何在Android应用中有效地实现这一功能。...
在Android系统中,访问外部存储设备(通常称为SD卡)上的文件是一项常见的任务,尤其是在开发应用程序时。本示例着重讲解如何使用`AsyncTask`来实现这个功能,以避免阻塞主线程,确保用户界面的流畅性。`AsyncTask`...
在Android平台上,将文件存储到SD卡中是应用程序常见的需求之一。这主要涉及到Android的文件系统、权限管理以及外部存储的使用。以下是一些关于如何在Android中存储文件到SD卡的关键知识点: 1. **Android文件系统*...
在Android系统中,SD卡(Secure Digital Card)是设备扩展存储空间的重要途径,它允许用户存储照片、视频、音乐和其他应用程序的数据。对于开发者而言,理解如何在SD卡上读写文件是开发Android应用时的一项基本技能...
通过以上步骤,开发者可以在Android应用中轻松读取并处理内部存储的文本文件,而无需依赖SD卡。这不仅简化了代码,还避免了因SD卡不可用或权限问题导致的异常情况。在实际项目中,可以根据需求对这些步骤进行扩展和...
《Android手机SD卡文件浏览器深度解析》 在智能手机领域,Android系统因其开源特性和丰富的定制性,深受广大用户的喜爱。而作为用户与设备之间交互的重要一环,文件管理显得尤为重要。"Android手机SD卡文件浏览器...
这个"Android简易sd卡文件浏览器"就是一个这样的工具,它允许用户浏览SD卡上的文件,并选择特定文件,然后返回该文件的路径,以便其他应用或服务可以使用这个路径进行文件操作,如上传。 在Android系统中,访问SD卡...
在Android开发中,有时我们需要将应用内部的RAW资源文件复制到外部存储(如SD卡)以便于用户访问或保存数据。这个"Android之将RAW资源文件写入SD卡工具类"是一个实用的功能,可以帮助开发者轻松完成这个任务。下面将...
在Android系统中,由于安全性和性能的考虑,应用程序通常不能直接访问内部存储空间,而是需要通过特定的方法来读写外部存储,也就是我们常说的SD卡(实际上现在多为内置存储)。本教程主要介绍如何在Android应用中...