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);

  // }

  }

更多相关文章

  1. AndroidManifest.xml配置文件选项详解
  2. android--------根据文件路径使用File类获取文件相关信息
  3. 安卓4.X系统 增加蓝牙接收文件类型
  4. 用SAX解析xml文件
  5. NFS挂载android文件系统
  6. Android获取存储卡路径的方式
  7. android 9.0 SD卡权限问题 文件管理器没有权限

随机推荐

  1. Android进阶系列4—从LayoutInflater到se
  2. Unity Android使用相机拍摄照片并在其上
  3. Android开发如何验证输入的手机号码是否
  4. opencv实时视频帧在android中没有显示sob
  5. 通过数据库接口获取到的中文数据是问号怎
  6. 尽管在清单文件中指定了权限,但是ACCESS_F
  7. Android快速开发框架andbase
  8. Android开发一些实用的类、方法及接口(新
  9. Android 监听各个Acitivity的生命周期
  10. viewpager 分页请求数据库并展示