此案例主要说的是Android使用GridView加载SD卡下所有目录,文件夹多层遍历,文件图标修改,设置文件对应打开方式等功能。

如图:

public class GridViewFile extends Activity implements View.OnClickListener {

    private Context context;
private TextView tv_title, textView;
private GridView listView;
private final String MUSIC_PATH = "/"; // 记录当前路径下 的所有文件的数组
File currentParent;
// 记录当前路径下的所有文件的文件数组
File[] currentFiles; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context = this;
initView();
} public void initView() {
findViewById(R.id.public_top_img_close).setOnClickListener(this);
listView = (GridView) findViewById(R.id.gridview);
textView = (TextView) findViewById(R.id.llss);
onLoad();
} public void onLoad() {
ListSongsName(); } private void ListSongsName() { // 获取系统的SD卡目录
File root = new File(MUSIC_PATH);
// 如果SD卡存在
if (root.exists()) {
currentParent = root;
currentFiles = root.listFiles();// 获取root目录下的所有文件
// 使用当前陆慕下的全部文件,文件夹来填充ListView
inflateListView(currentFiles);
}
// 为ListView的列表项的单击事件绑定监视器
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// 用户点击了文件,则调用手机已安装软件操作该文件
if (currentFiles[position].isFile()) {
onError(currentFiles[position].getPath() + "1");
Intent intent = OpenFile.openFile(currentFiles[position]
.getPath());
startActivity(intent);
} else { // 获取currentFiles[position]路径下的所有文件
File[] tmp = currentFiles[position].listFiles();
if (tmp == null || tmp.length == 0) {
Toast.makeText(GridViewFile.this, "空文件夹!",
Toast.LENGTH_SHORT).show();
}// if
else {
// 获取用户单击的列表项对应的文件夹,设为当前的父文件夹
currentParent = currentFiles[position];
// 保存当前文件夹内的全部问价和文件夹
currentFiles = tmp;
inflateListView(currentFiles);
}
}
}
}); } // 更新列表
private void inflateListView(File[] files) {
if (files.length == 0)
Toast.makeText(GridViewFile.this, "sd卡不存在", Toast.LENGTH_SHORT)
.show();
else {
// 创建一个List集合,List集合的元素是Map
List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>();
for (int i = 0; i < files.length; i++) {
Map<String, Object> listItem = new HashMap<String, Object>();
// 如果当前File是文件夹,使用folder图标;否则使用file图标
Log.i("path", files[i].getPath());
Log.i("path", files[i].getName());
if (files[i].isDirectory())
listItem.put("icon", R.drawable.file_wenjianjia);
// else if(files[i].isFi)
else
listItem.put("icon", R.drawable.file_wenjian1);
listItem.put("fileName", files[i].getName());
// 添加List项
listItems.add(listItem);
}
// 创建一个SimpleAdapter
SimpleAdapter simpleAdapter = new SimpleAdapter(this, listItems,
R.layout.acheshi_item, new String[] { "icon", "fileName" },
new int[] { R.id.imageView1, R.id.text_path });
// 位ListView设置Adpter
listView.setAdapter(simpleAdapter);
try {
textView.setText("当前路径为:" + currentParent.getCanonicalPath());
} catch (IOException e) {
e.printStackTrace();
}
}
} @Override
public void onClick(View v) {
onbey();
} // 返回上层菜单
private void onbey() {
try {
if (!MUSIC_PATH.equals(currentParent.getCanonicalPath())) {
// 获取上一层目录
currentParent = currentParent.getParentFile();
// 列出当前目录下的所有文件
currentFiles = currentParent.listFiles();
// 再次更新ListView
inflateListView(currentFiles);
} else {
new AlertDialog.Builder(this)
.setIcon(R.drawable.ic_launcher)
.setTitle("提示")
.setMessage("确定要退出吗?")
.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
finish();
}
})
.setNegativeButton("取消",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
}
}).create().show();
}
} catch (Exception e) {
e.printStackTrace();
}
} public void onError(Object error) {
Toast.makeText(getApplicationContext(), error + "", Toast.LENGTH_LONG)
.show();
} protected void onDestroy() {
super.onDestroy();
} }

不要忘记在AndroidManifest.xml加权限哦!

 <!-- SD卡权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
 

Android加载SD卡目录,文件夹遍历,图片设置,设置文件对应打开方式等的更多相关文章

  1. 动态加载sd卡或者手机内置存储卡的so库

    package com.wsc.utils; import android.content.Context; import com.wsc.common.Entrance; import com.ws ...

  2. Android NDK加载SD卡中的so

    最近公司框架刚移植完成,由于框架程序要调用子程序,每个子程序都是一个so文件,有好几百个,把所有的so和apk打包不现实,及时可以升级维护也很麻烦.所以需要放SD卡中.考虑两种方式 1 放到设备中的 ...

  3. listview异步加载sd卡图片

    package com.example.gridview; import java.io.File; import java.io.FileOutputStream; import java.io.I ...

  4. android 获取所有SD卡目录

    //返回sd卡路径public static List<String> getStorageDirectories(Context context) { StorageManager sm ...

  5. PDF 补丁丁 0.4.1.804 测试版发布:合并文件夹的图片和PDF文件,自由生成多层次书签

    新的测试版增强了合并文件的功能,可以合并文件夹内的图片和PDF文件,还可以在合并文件列表上直接指定与合并文件对应的PDF书签标题.通过拖放文件项目生成多层次的PDF书签.如下图所示: 另外,新的测试版 ...

  6. Eclipse中查看Android模拟器SD卡目录

    · 有时候用到Android模拟器来模拟SD卡相关操作,在Eclipse中可以直接查看SD卡目录: 首先,新建模拟器的时候要创建SD卡,存储的大小根据需要创建: 启动模拟器,在Eclipse中打开视图 ...

  7. 将文件放到Android模拟器的SD卡中的两种解决方法

    两种方式:一.窗口界面操作1.打开DDMS页面2.打开File Explorer页,如果没有,在Window --> Show View -->File Explorer3.一般就在mnt ...

  8. android 删除SD卡或者手机的缓存图片和目录

    public static final String TEMP_PHOTO_FILE_NAME = "temp_photo.jpg"; private static String ...

  9. 将文件放到Android模拟器的SD卡

    1.打开DDMS页面2.打开File Explorer页,如果没有,在Window –> Show View –>File Explorer3.一般就在mnt –> sdcard中4 ...

随机推荐

  1. JNI相关知识

    JNI(Java Native Interface,JAVA原生接口) 使用JNI可以使Java代码和其他语言写的代码(如C/C++代码)进行交互. 问:为什么要进行交互? |-  首先,Java语言 ...

  2. java中static 和 final 的一些使用规则

    一.final 1.final变量: 当你在类中定义变量时,在其前面加上final关键字,那便是说,这个变量一旦被初始化便不可改变,这里不可改变的意思对基本类型来说是其值不可变,而对于对象变量来说其引 ...

  3. C++设计模式-Command命令模式

    Command命令模式作用:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可撤销的操作. 由于“行为请求者”与“行为实现者”的紧耦合,使用命令模式 ...

  4. RSA加密算法总结

    RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准. RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但是想要对其乘积进 ...

  5. mongoDB数据库

    1.mongoDB简介:mongoDB 为非关系数据库,集合(collection)关系数据库中的表,中存储的为json结构的文档,集合中的每一条记录都可以结构不同, 但必须都有_id字段(mongo ...

  6. Junit4断言

    Junit4断言API: http://junit.org/javadoc/latest/index.html Constructor Summary protected Assert()       ...

  7. java的基本程序设计之个人总结要点

    java的基本程序设计之个人总结要点 这是个人看完java核心卷一书之后,罗列的一些比较重要的点子,希望共享给大家. [数值类型] 1.从java7开始,加上前缀0b就可以写二进制数,例如:0b100 ...

  8. python脚本基础总结

    1. 注释 ①单行注释:#单行注释 ②多行注释: ''' 三个单引号,多行注释符 ''' ③中文注释:#coding=utf-8 或者 #coding=gbk 2.输入输出 ① 输入:  3.0后的p ...

  9. VS 设置编译后的程序可以以管理员身份运行

    1.首先,创建一个文件命名为 XXX.exe.manifest, 并将以下内容复制到文件 <?xml version="1.0" encoding="UTF-8&q ...

  10. Java的版本分类

    J2EE (JavaEE)Java2 Enterprise Edition定位在服务器端的应用 J2SE(JavaSE)Java2 Standard Edition定位在个人计算机上的应用 J2ME( ...