zoukankan      html  css  js  c++  java
  • android SD卡浏览器

    设计思路:

    1.首先得到sd卡目录,如果sd卡存在就把sd卡根目录下的文件和文件夹显示在listview中,

    2.定义两个button,一个用于返回根目录,一个用于返回上一层,

    3.对listview位置进行监听,如果是文件则提示打不开,如果是文件夹就进入下个目录,得到下个目录底下的文件和文件夹,刷新listview

    代码:

    View Code
      1 package cn.shaoyangjiang.com;
    2 import java.io.File;
    3 import java.text.SimpleDateFormat;
    4 import java.util.ArrayList;
    5 import java.util.Date;
    6 import java.util.HashMap;
    7 import java.util.List;
    8 import java.util.Map;
    9
    10 import android.app.Activity;
    11 import android.os.Bundle;
    12 import android.view.View;
    13 import android.widget.AdapterView;
    14 import android.widget.AdapterView.OnItemClickListener;
    15 import android.widget.Button;
    16 import android.widget.ListView;
    17 import android.widget.SimpleAdapter;
    18 import android.widget.TextView;
    19 import android.widget.Toast;
    20
    21 public class WJActivity extends Activity {
    22
    23 private TextView tvpath;
    24 private ListView lvFiles;
    25 private Button btnParent;
    26 private Button btRoot;
    27
    28 // 记录当前的父文件夹
    29 File currentParent;
    30 File root;
    31 // 记录当前路径下的所有文件夹的文件数组
    32 File[] currentFiles;
    33
    34 public void onCreate(Bundle savedInstanceState) {
    35 super.onCreate(savedInstanceState);
    36 setContentView(R.layout.main);
    37
    38 lvFiles = (ListView) this.findViewById(R.id.files);
    39 tvpath = (TextView) this.findViewById(R.id.tvpath);
    40 btnParent = (Button) this.findViewById(R.id.btnParent);
    41 btRoot = (Button) this.findViewById(R.id.btRoot);
    42
    43 // 获取系统的SDCard的目录
    44 root = new File("/mnt/sdcard/");
    45 // 如果SD卡存在的话
    46 if (root.exists()) {
    47
    48 currentParent = root;
    49 currentFiles = root.listFiles();
    50 // 使用当前目录下的全部文件、文件夹来填充ListView
    51 inflateListView(currentFiles);
    52
    53 }
    54
    55 lvFiles.setOnItemClickListener(new OnItemClickListener() {
    56 @Override
    57 public void onItemClick(AdapterView<?> adapterView, View view,
    58 int position, long id) {
    59 // 如果用户单击了文件,直接返回,不做任何处理
    60 if (currentFiles[position].isFile()) {
    61 // 也可自定义扩展打开这个文件等
    62 Toast.makeText(WJActivity.this,
    63 "文件打不开的", Toast.LENGTH_LONG).show();
    64 return;
    65 }
    66 // 获取用户点击的文件夹 下的所有文件
    67 File[] tem = currentFiles[position].listFiles();
    68 if (tem == null || tem.length == 0) {
    69
    70 Toast.makeText(WJActivity.this,
    71 "当前路径不可访问或者该路径下没有文件", Toast.LENGTH_LONG).show();
    72 } else {
    73 // 获取用户单击的列表项对应的文件夹,设为当前的父文件夹
    74 currentParent = currentFiles[position];
    75 // 保存当前的父文件夹内的全部文件和文件夹
    76 currentFiles = tem;
    77 // 再次更新ListView
    78 inflateListView(currentFiles);
    79 }
    80
    81 }
    82 });
    83
    84 // 获取上一级目录
    85 btnParent.setOnClickListener(new View.OnClickListener() {
    86
    87 @Override
    88 public void onClick(View v) {
    89 try {
    90
    91 if (!currentParent.getCanonicalPath().equals("/mnt/sdcard")) {
    92
    93 // 获取上一级目录
    94 currentParent = currentParent.getParentFile();
    95 // 列出当前目录下的所有文件
    96 currentFiles = currentParent.listFiles();
    97 // 再次更新ListView
    98 inflateListView(currentFiles);
    99 }
    100 } catch (Exception e) {
    101 // TODO: handle exception
    102 }
    103
    104 }
    105 });
    106
    107 // 回到根目录
    108 btRoot.setOnClickListener(new View.OnClickListener() {
    109
    110 @Override
    111 public void onClick(View v) {
    112 currentParent = root;
    113 currentFiles = root.listFiles();
    114 // 使用当前目录下的全部文件、文件夹来填充ListView
    115 inflateListView(currentFiles);
    116 }
    117 });
    118
    119 }
    120
    121 /**
    122 * 根据文件夹填充ListView
    123 *
    124 * @param files
    125 */
    126 private void inflateListView(File[] files) {
    127
    128 List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>();
    129
    130 for (int i = 0; i < files.length; i++) {
    131
    132 Map<String, Object> listItem = new HashMap<String, Object>();
    133
    134 if (files[i].isDirectory()) {
    135 // 如果是文件夹就显示的图片为文件夹的图片
    136 listItem.put("icon", R.drawable.folder);
    137 } else {
    138 listItem.put("icon", R.drawable.file);
    139 }
    140 // 添加一个文件名称
    141 listItem.put("filename", files[i].getName());
    142
    143 File myFile = new File(files[i].getName());
    144
    145 // 获取文件的最后修改日期
    146 long modTime = myFile.lastModified();
    147 SimpleDateFormat dateFormat = new SimpleDateFormat(
    148 "yyyy-MM-dd HH:mm:ss");
    149 System.out.println(dateFormat.format(new Date(modTime)));
    150
    151 // 添加一个最后修改日期
    152 listItem.put("modify",
    153 "修改日期:" + dateFormat.format(new Date(modTime)));
    154
    155 listItems.add(listItem);
    156
    157 }
    158
    159 // 定义一个SimpleAdapter
    160 SimpleAdapter adapter = new SimpleAdapter(
    161 WJActivity.this, listItems, R.layout.list_item,
    162 new String[] { "filename", "icon", "modify" }, new int[] {
    163 R.id.file_name, R.id.icon, R.id.file_modify });
    164
    165 // 填充数据集
    166 lvFiles.setAdapter(adapter);
    167
    168 try {
    169 tvpath.setText("当前路径为:" + currentParent.getCanonicalPath());
    170 } catch (Exception e) {
    171 e.printStackTrace();
    172 }
    173
    174 }
    175 }

    布局文件:

    View Code
     1 <?xml version="1.0" encoding="utf-8"?>
    2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3 android:layout_width="fill_parent"
    4 android:layout_height="fill_parent"
    5 android:orientation="vertical" >
    6 <TextView
    7 android:id="@+id/tvpath"
    8 android:layout_gravity="center_horizontal"
    9 android:layout_width="fill_parent"
    10 android:layout_height="wrap_content"
    11 android:textColor="#ff0000"
    12 android:textSize="20dip"
    13 />
    14 <Button android:id="@+id/btRoot"
    15 android:layout_width="fill_parent"
    16 android:layout_height="wrap_content"
    17 android:text="回到根目录"
    18 android:layout_gravity="center"/>
    19 <Button android:id="@+id/btnParent"
    20 android:layout_width="fill_parent"
    21 android:layout_height="wrap_content"
    22 android:text="回到上一层目录"
    23 android:paddingTop="20dip"
    24 android:layout_gravity="center"/>
    25
    26 <ListView android:id="@+id/files"
    27 android:layout_width="wrap_content"
    28 android:layout_height="wrap_content"
    29 >
    30 </ListView>
    31 </LinearLayout>

    listview布局

    View Code
     1 <?xml version="1.0" encoding="utf-8"?>
    2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3 android:layout_width="fill_parent"
    4 android:layout_height="fill_parent"
    5 android:orientation="horizontal"
    6 android:padding="5dip" >
    7 <ImageView android:id="@+id/icon"
    8 android:layout_width="wrap_content"
    9 android:layout_height="wrap_content"
    10 android:paddingLeft="10dp"
    11 />
    12 <LinearLayout android:orientation="vertical"
    13 android:layout_width="wrap_content"
    14 android:layout_height="wrap_content"
    15 >
    16 <TextView android:id="@+id/file_name"
    17 android:layout_width="wrap_content"
    18 android:layout_height="wrap_content"
    19 android:textSize="16dp"
    20 android:gravity="center_vertical"
    21 />
    22 <TextView android:id="@+id/file_modify"
    23 android:layout_width="wrap_content"
    24 android:layout_height="wrap_content"
    25 android:textSize="16dp"
    26 android:gravity="center_vertical"
    27 />
    28 </LinearLayout>
    29
    30 </LinearLayout>

    效果图:




  • 相关阅读:
    Swift 编程语言新手教程
    标准差(standard deviation)和标准错误(standard error)你能解释一下?
    shell文字过滤程序(十一):paste命令
    java 获取系统变量(环境变量和环境变量)
    MD5算法原理
    受托停止事件冒泡
    搜索引擎优化要领:8条辅助技巧(三)
    几种更新(Update语句)查询的方法
    学习盲点
    2014年同年CFA考试中哪些CFA资料没有变化?
  • 原文地址:https://www.cnblogs.com/shaoyangjiang/p/2394065.html
Copyright © 2011-2022 走看看