`

Android SD卡文件列表

 
阅读更多
  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卡文件浏览器应运而生。本文将深入探讨这一主题,包括其工作原理、...

    Android SD卡文件读写操作

    在Android系统中,SD卡(Secure Digital Card)是设备存储扩展和数据交换的重要媒介,它为应用程序提供了额外的存储空间,以保存用户数据、媒体文件或其他应用相关资源。本篇文章将详细探讨Android平台上SD卡的文件...

    Android sd卡音频文件列表显示+歌曲播放

    这个"Android sd卡音频文件列表显示+歌曲播放"的Demo就是为此目的设计的。它结合了文件系统操作、UI设计以及媒体播放技术,是Android应用开发中的一个重要实践。 首先,我们来探讨如何获取SD卡上的音乐文件列表。在...

    android sd卡文件浏览

    总之,Android平台通过一系列API提供了对SD卡文件的访问能力,开发者可以通过编程实现文件浏览功能,为用户提供查看和管理SD卡上文件的便利。在实际开发中,要确保遵循权限管理和最佳实践,以确保应用的兼容性和安全...

    android中sd卡文件浏览列表

    在Android 6.0(API级别23)之前,应用程序默认拥有读写外部存储(如SD卡)的权限。但从Android 6.0开始,应用需要在运行时请求`WRITE_EXTERNAL_STORAGE`和`READ_EXTERNAL_STORAGE`权限。用户可以在应用的设置中给予...

    android读取sd卡中MP3文件

    1. **文件系统访问**:Android设备上的外部存储(通常称为SD卡)被模拟为一个文件系统,可以使用Java的`java.io.File`类来操作。首先,你需要获取SD卡的根目录路径,通常是`Environment.getExternalStorageDirectory...

    android demo,sd卡文件存储和data下文件存储。

    在使用SD卡存储时,需要注意权限问题。自Android 6.0(API级别23)以来,应用需要在运行时请求`WRITE_EXTERNAL_STORAGE`和`READ_EXTERNAL_STORAGE`权限。 **2. data下文件存储** 内部data目录下的文件存储主要用于...

    android读取sd卡中音乐文件列表

    ### Android读取SD卡中音乐文件列表 在Android开发中,常常需要实现的功能之一就是读取设备中的音乐文件。这通常用于音乐播放器类的应用程序,以便用户可以浏览并选择他们想要播放的歌曲。本文将详细介绍如何通过...

    android遍历sd卡视频文件

    遍历SD卡(通常指的是外部存储空间)上的所有视频文件,可以使用递归的方式来实现。从根目录开始,逐个检查每个文件是否为视频文件。可以通过文件的扩展名来判断,常见的视频格式有.mp4、.avi、.mkv、.wmv等。以下是...

    Android播放SD卡视频文件

    在Android平台上,播放SD卡中的视频文件是一项常见的需求,尤其对于多媒体应用来说更是必不可少。本文将详细介绍如何实现在Android应用中浏览并播放SD卡上的视频文件。我们将主要围绕以下几个方面展开: 1. **...

    android 读取和存储sd卡

    在Android系统中,读取和存储SD卡是应用程序与外部存储交互的重要部分,尤其是在处理大量数据或者需要离线可用内容时。本示例项目“StorageManageDemo”将帮助开发者了解如何在Android应用中有效地实现这一功能。...

    android 搜索SD卡文件(源码)

    在Android系统中,访问外部存储设备(通常称为SD卡)上的文件是一项常见的任务,尤其是在开发应用程序时。本示例着重讲解如何使用`AsyncTask`来实现这个功能,以避免阻塞主线程,确保用户界面的流畅性。`AsyncTask`...

    android 存储文件到sd卡中

    在Android平台上,将文件存储到SD卡中是应用程序常见的需求之一。这主要涉及到Android的文件系统、权限管理以及外部存储的使用。以下是一些关于如何在Android中存储文件到SD卡的关键知识点: 1. **Android文件系统*...

    android sd卡写文件备份

    在Android系统中,SD卡(Secure Digital Card)是设备扩展存储空间的重要途径,它允许用户存储照片、视频、音乐和其他应用程序的数据。对于开发者而言,理解如何在SD卡上读写文件是开发Android应用时的一项基本技能...

    Android Studio文本文件内容读取例子(不用sd卡)

    通过以上步骤,开发者可以在Android应用中轻松读取并处理内部存储的文本文件,而无需依赖SD卡。这不仅简化了代码,还避免了因SD卡不可用或权限问题导致的异常情况。在实际项目中,可以根据需求对这些步骤进行扩展和...

    Android手机SD卡文件浏览器

    《Android手机SD卡文件浏览器深度解析》 在智能手机领域,Android系统因其开源特性和丰富的定制性,深受广大用户的喜爱。而作为用户与设备之间交互的重要一环,文件管理显得尤为重要。"Android手机SD卡文件浏览器...

    Android简易sd卡文件浏览器

    这个"Android简易sd卡文件浏览器"就是一个这样的工具,它允许用户浏览SD卡上的文件,并选择特定文件,然后返回该文件的路径,以便其他应用或服务可以使用这个路径进行文件操作,如上传。 在Android系统中,访问SD卡...

    Android 之 将RAW资源文件写入SD卡工具类

    在Android开发中,有时我们需要将应用内部的RAW资源文件复制到外部存储(如SD卡)以便于用户访问或保存数据。这个"Android之将RAW资源文件写入SD卡工具类"是一个实用的功能,可以帮助开发者轻松完成这个任务。下面将...

    android 下载文件到SD卡

    在Android系统中,由于安全性和性能的考虑,应用程序通常不能直接访问内部存储空间,而是需要通过特定的方法来读写外部存储,也就是我们常说的SD卡(实际上现在多为内置存储)。本教程主要介绍如何在Android应用中...

Global site tag (gtag.js) - Google Analytics