android学习笔记(一) 遍历SD卡中所有文件并在listview中显示
2011-06-07 14:21
393 查看
有关android SD卡操作中,遍历是最简单且最基础常用的操作。
下面就来实现遍历sd卡中所有文件,并且用一个ListView显示出来。
首先,了解一下ListView的用法。
android document中的解释:
A view that shows items in a vertically scrolling list. The items come from the
也就是说 listview是将一个ListAdapter的内容用图像显示出来,
所以我们可以用一个SimpleAdapter来保存SD卡遍历的结果。
而我们知道linux文件系统是一颗单独的树(没有森林)。所以从根目录进行一次深搜就能访问所有节点。
而android SD卡的根目录为"/sdcard"。
调用getAllFiles(new File("/sdcard"))后所有文件保存在list中。
下面就是在将数据保存到SimpleAdapter中了。
查阅android document 其构造函数为:
context为 显示listView的activity,
data为 数据,
resource为 listview中每一格单元格的布局xml的位置(res/layout/relative.xml,自己创建)
from 为listview中每一个item中组件(如一个item中含有2个textview--textview1,textview2)所对应的数据源。
to 为 form的数据源对应的item中组件的名称(textview1,textview2)。
所以需要将刚才得到的list数据转化成 List<? extends Map<String, ?>>类型
以下为转化函数
最后 通过listView 显示 方法为
listView的布局定义在main.xml中
listview中单元格的布局定义在relative.xml中
以下是运行效果(读取的sd卡为模拟器中的SD卡,在真机上运行,文件太多,会花费几秒钟时间读取,可以将上述递归遍历改进):
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/10/1a8f232ca6b7d13da85ab4eb02f66354.gif)
模拟SD卡 内容 请看我另一篇文章。
以下是所有代码(可运行):
AndroidMainfest.xml中一定要加上
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
//testSD.java
res/layout/main.xml
res/layout/relative.xml
下面就来实现遍历sd卡中所有文件,并且用一个ListView显示出来。
首先,了解一下ListView的用法。
android document中的解释:
A view that shows items in a vertically scrolling list. The items come from the
ListAdapterassociated with this view.
也就是说 listview是将一个ListAdapter的内容用图像显示出来,
所以我们可以用一个SimpleAdapter来保存SD卡遍历的结果。
而我们知道linux文件系统是一颗单独的树(没有森林)。所以从根目录进行一次深搜就能访问所有节点。
而android SD卡的根目录为"/sdcard"。
private void getAllFiles(File root){ File files[] = root.listFiles(); if(files != null) for(File f:files){ if(f.isDirectory()){ getAllFiles(f); } else{ this.list.add(f); } } }
调用getAllFiles(new File("/sdcard"))后所有文件保存在list中。
下面就是在将数据保存到SimpleAdapter中了。
查阅android document 其构造函数为:
public SimpleAdapter
(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)
其中context为 显示listView的activity,
data为 数据,
resource为 listview中每一格单元格的布局xml的位置(res/layout/relative.xml,自己创建)
from 为listview中每一个item中组件(如一个item中含有2个textview--textview1,textview2)所对应的数据源。
to 为 form的数据源对应的item中组件的名称(textview1,textview2)。
所以需要将刚才得到的list数据转化成 List<? extends Map<String, ?>>类型
以下为转化函数
private ArrayList<Map<String, Object>> getMapData(ArrayList<File> list){ ArrayList<Map<String, Object>> data = new ArrayList<Map<String, Object>>(); HashMap<String,Object> item; int i = 0 ; for(i=0;i<list.size();i++){ item = new HashMap<String,Object>(); String path = list.get(i).toString(); String name = path.substring(path.lastIndexOf("/")+1,path.length()); //保存每一格list单元格的数据 , item.put("ItemText",name); item.put("ItemTitle", path); data.add(item); } return data; }
最后 通过listView 显示 方法为
i = (ListView) findViewById(R.id.music_list); list = new ArrayList<File>(); getAllFiles(new File("/sdcard")); SimpleAdapter ladapter = new SimpleAdapter(this,getMapData(list),R.layout.relative, new String[]{"ItemText","ItemTitle"},new int[]{R.id.ItemTitle,R.id.ItemText}); i.setAdapter(ladapter);
listView的布局定义在main.xml中
listview中单元格的布局定义在relative.xml中
以下是运行效果(读取的sd卡为模拟器中的SD卡,在真机上运行,文件太多,会花费几秒钟时间读取,可以将上述递归遍历改进):
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/10/1a8f232ca6b7d13da85ab4eb02f66354.gif)
模拟SD卡 内容 请看我另一篇文章。
以下是所有代码(可运行):
AndroidMainfest.xml中一定要加上
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
//testSD.java
package my.sd;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
public class testSD extends Activity {
//view
TextView tView ;
ListView i ;
Button btn ;
//data
private ArrayList<File> list ;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tView = (TextView)findViewById(R.id.textview1);
//btn = (Button) findViewById(R.id.go);
tView = new TextView(this);
tView.setText("get all files in your sd card");
//init data
i = (ListView) findViewById(R.id.music_list); list = new ArrayList<File>(); getAllFiles(new File("/sdcard")); SimpleAdapter ladapter = new SimpleAdapter(this,getMapData(list),R.layout.relative, new String[]{"ItemText","ItemTitle"},new int[]{R.id.ItemTitle,R.id.ItemText}); i.setAdapter(ladapter);
TextView empty = new TextView(this);
empty.setText("empty!");
i.setEmptyView(empty);
}
private ArrayList<Map<String, Object>> getMapData(ArrayList<File> list){ ArrayList<Map<String, Object>> data = new ArrayList<Map<String, Object>>(); HashMap<String,Object> item; int i = 0 ; for(i=0;i<list.size();i++){ item = new HashMap<String,Object>(); String path = list.get(i).toString(); String name = path.substring(path.lastIndexOf("/")+1,path.length()); //保存每一格list单元格的数据 , item.put("ItemText",name); item.put("ItemTitle", path); data.add(item); } return data; }
private void getAllFiles(File root){ File files[] = root.listFiles(); if(files != null) for(File f:files){ if(f.isDirectory()){ getAllFiles(f); } else{ this.list.add(f); } } }
}
res/layout/main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/textview1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <ListView android:id="@+id/music_list" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>
res/layout/relative.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout android:id="@+id/RelativeLayout01" android:layout_width="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="wrap_content" android:paddingBottom="3dip" android:paddingLeft="10dip" android:paddingRight="10dip"> <TextView android:id="@+id/ItemTitle" android:text="TextView01" android:layout_height="wrap_content" android:textSize="18dip" android:layout_width="fill_parent" /> <TextView android:id="@+id/ItemText" android:text="TextView02" android:layout_height="wrap_content" android:layout_width="fill_parent" android:layout_below="@+id/ItemTitle" /> </RelativeLayout>
相关文章推荐
- Android之遍历SD卡所有文件显示在ListView
- php 遍历显示文件夹下所有目录、所有文件的函数,没有分页的代码
- php 遍历显示文件夹下所有目录、所有文件的函数
- php 遍历显示文件夹下所有目录、所有文件的函数,没有分页的代码
- 遍历某个文件夹下的所有文件并格式化显示出来
- 遍历Sd卡目录中所有子文件【可筛选特定类型文件】
- Android读取SD卡下面所有的TXT文件名 listView显示出来
- Android_遍历SD卡所有文件
- 遍历显示文件夹下所有目录、所有文件的函数
- ListView显示SD卡中的所有图片
- 遍历SD卡中的所有文件
- 遍历显示文件夹下所有目录、所有文件的函数,没有分页
- js遍历本地所有图片文件,显示在浏览器中
- js遍历本地所有图片文件,显示在浏览器中
- Android实现读取SD卡下所有TXT文件名并用listView显示出来的方法
- android读取SD卡下面所有的TXT文件名,listView显示出来。
- Android读取SD卡下面所有的TXT文件名 listView显示出来
- [安卓源代码]简单实现SD卡上遍历所有文件夹寻找指定格式文件
- 遍历目录下所有图片文件显示的方法.(已废弃)
- 获取SD卡上所有的音乐文件信息