Android的数据存储和IO-SD卡文件浏览器
Android的数据存储和IO-SD卡文件浏览器
Android的数据存储和IO-SD卡文件浏览器
创建项目:SDFileExplorer
运行项目结果:
布局文件: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/path"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="center_horizontal"
- />
- <!-- 列出当前路径下所有文件的ListView -->
- <ListView
- android:id="@+id/list"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:divider="#000"
- />
- <!-- 返回上一级目录的按钮 -->
- <Button android:id="@+id/parent"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:background="@drawable/home"
- android:paddingTop="20dp"
- android:layout_gravity="center"/>
- </LinearLayout>
列表布局文件: line.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="horizontal"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <!-- 定义一个ImageView,用于作为列表项的一部分。 -->
- <ImageView android:id="@+id/icon"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:paddingLeft="10dp"
- />
- <!-- 定义一个TextView,用于作为列表项的一部分。 -->
- <TextView android:id="@+id/file_name"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textSize="16dp"
- android:gravity="center_vertical"
- android:paddingLeft="10dp"
- android:paddingTop="10dp"
- android:paddingBottom="10dp"
- />
- </LinearLayout>
Activity文件:SDFileExplorer.java
- package wwj.sdfileexplorer;
- 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.view.View;
- import android.view.View.OnClickListener;
- import android.widget.AdapterView;
- import android.widget.AdapterView.OnItemClickListener;
- import android.widget.Button;
- import android.widget.ListView;
- import android.widget.SimpleAdapter;
- import android.widget.TextView;
- import android.widget.Toast;
- public class SDFileExplorer extends Activity {
- ListView listView;
- TextView textView;
- //记录当前的父文件夹
- File currentParent;
- //记录当前目录路径下的所有文件的文件数组
- File[] currentFiles;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- //获取列出全部文件的ListView
- listView = (ListView)findViewById(R.id.list);
- textView = (TextView)findViewById(R.id.path);
- //获取系统的SD卡的目录
- File root = new File("/mnt/sdcard/");
- //如果SD卡存在
- if(root.exists()){
- currentParent = root;
- currentFiles = root.listFiles();
- //使用当前目录下的全部文件、文件夹来填充ListView
- inflateListView(currentFiles);
- }
- //为ListView的列表项的单击事件绑定监听器
- listView.setOnItemClickListener(new OnItemClickListener() {
- public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
- long arg3) {
- // TODO Auto-generated method stub
- //用户单击了文件,直接返回,不做任何处理
- if(currentFiles[arg2].isFile())
- return;
- //获取用户单击的文件夹下的所有文件
- File[] tmp = currentFiles[arg2].listFiles();
- if(tmp == null || tmp.length == 0){
- Toast.makeText(SDFileExplorer.this, "当前路径不可访问或该路径下没有文件", 20000).show();
- }
- else{
- //获取用户单击的列表项对应的文件夹,设为当前的父文件夹
- currentParent = currentFiles[arg2];
- //保存当前的父文件夹内的全部文件和文件夹
- currentFiles = tmp;
- //再次更新ListView
- inflateListView(currentFiles);
- }
- }
- });
- //获取上一级目录的按钮
- Button parent = (Button)findViewById(R.id.parent);
- parent.setOnClickListener(new OnClickListener() {
- public void onClick(View v) {
- // TODO Auto-generated method stub
- try{
- if(!currentParent.getCanonicalPath().equals("/mnt/sdcard")){
- //获取上级目录
- currentParent = currentParent.getParentFile();
- //列出当前目录下所有文件
- currentFiles = currentParent.listFiles();
- //再次更新ListView
- inflateListView(currentFiles);
- }
- }catch (Exception e) {
- // TODO: handle exception
- e.printStackTrace();
- }
- }
- });
- }
- private void inflateListView(File[] files){
- //创建一个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是文件夹,使用floder图标;否则使用file图标
- if(files[i].isDirectory()){
- listItem.put("icon", R.drawable.folder);
- }
- else{
- listItem.put("icon", R.drawable.file);
- }
- listItem.put("fileName", files[i].getName());
- //添加List项
- listItems.add(listItem);
- }
- //创建一个SimpleAdapter
- SimpleAdapter simpleAdapter = new SimpleAdapter(this, listItems, R.layout.line,
- new String[]{"icon","fileName"}, new int[]{R.id.icon, R.id.file_name});
- //为ListView设置Adapter
- listView.setAdapter(simpleAdapter);
- try{
- textView.setText("当前路径为: " + currentParent.getCanonicalPath());
- }catch (Exception e) {
- // TODO: handle exception
- e.printStackTrace();
- }
- }
- }
评论暂时关闭