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

    设计思路:

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

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

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

    代码:

    View Code
     package cn.shaoyangjiang.com;
     import java.io.File;
     import java.text.SimpleDateFormat;
     import java.util.ArrayList;
     import java.util.Date;
     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.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 WJActivity extends Activity {
     
         private TextView tvpath;
         private ListView lvFiles;
         private Button btnParent;
         private Button btRoot;
     
         // 记录当前的父文件夹
         File currentParent;
         File root;
         // 记录当前路径下的所有文件夹的文件数组
         File[] currentFiles;
     
         public void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             setContentView(R.layout.main);
     
             lvFiles = (ListView) this.findViewById(R.id.files);
             tvpath = (TextView) this.findViewById(R.id.tvpath);
             btnParent = (Button) this.findViewById(R.id.btnParent);
             btRoot = (Button) this.findViewById(R.id.btRoot);
     
             // 获取系统的SDCard的目录
             root = new File("/mnt/sdcard/");
             // 如果SD卡存在的话
             if (root.exists()) {
     
                 currentParent = root;
                 currentFiles = root.listFiles();
                 // 使用当前目录下的全部文件、文件夹来填充ListView
                 inflateListView(currentFiles);
     
             }
     
             lvFiles.setOnItemClickListener(new OnItemClickListener() {
                 @Override
                 public void onItemClick(AdapterView<?> adapterView, View view,
                         int position, long id) {
                     // 如果用户单击了文件,直接返回,不做任何处理
                     if (currentFiles[position].isFile()) {
                         // 也可自定义扩展打开这个文件等
                         Toast.makeText(WJActivity.this,
                                 "文件打不开的", Toast.LENGTH_LONG).show();
                         return;
                     }
                     // 获取用户点击的文件夹 下的所有文件
                     File[] tem = currentFiles[position].listFiles();
                     if (tem == null || tem.length == 0) {
     
                         Toast.makeText(WJActivity.this,
                                 "当前路径不可访问或者该路径下没有文件", Toast.LENGTH_LONG).show();
                     } else {
                         // 获取用户单击的列表项对应的文件夹,设为当前的父文件夹
                         currentParent = currentFiles[position];
                         // 保存当前的父文件夹内的全部文件和文件夹
                         currentFiles = tem;
                         // 再次更新ListView
                         inflateListView(currentFiles);
                     }
     
                 }
             });
     
             // 获取上一级目录
             btnParent.setOnClickListener(new View.OnClickListener() {
     
                 @Override
                 public void onClick(View v) {
                     try {
     
                         if (!currentParent.getCanonicalPath().equals("/mnt/sdcard")) {
     
                             // 获取上一级目录
                             currentParent = currentParent.getParentFile();
                             // 列出当前目录下的所有文件
                             currentFiles = currentParent.listFiles();
                             // 再次更新ListView
                             inflateListView(currentFiles);
                         }
                     } catch (Exception e) {
                         // TODO: handle exception
                     }
                
                 }
             });
            
             // 回到根目录
             btRoot.setOnClickListener(new View.OnClickListener() {
     
                 @Override
                 public void onClick(View v) {
                     currentParent = root;
                     currentFiles = root.listFiles();
                     // 使用当前目录下的全部文件、文件夹来填充ListView
                     inflateListView(currentFiles);
                 }
             });
     
         }
     
         /**
          * 根据文件夹填充ListView
          *
          * @param files
     */
         private void inflateListView(File[] files) {
     
             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>();
     
                 if (files[i].isDirectory()) {
                     // 如果是文件夹就显示的图片为文件夹的图片
                     listItem.put("icon", R.drawable.folder);
                 } else {
                     listItem.put("icon", R.drawable.file);
                 }
                 // 添加一个文件名称
                 listItem.put("filename", files[i].getName());
     
                 File myFile = new File(files[i].getName());
     
                 // 获取文件的最后修改日期
                 long modTime = myFile.lastModified();
                 SimpleDateFormat dateFormat = new SimpleDateFormat(
                         "yyyy-MM-dd HH:mm:ss");
                 System.out.println(dateFormat.format(new Date(modTime)));
     
                 // 添加一个最后修改日期
                 listItem.put("modify",
                         "修改日期:" + dateFormat.format(new Date(modTime)));
     
                 listItems.add(listItem);
     
             }
     
             // 定义一个SimpleAdapter
             SimpleAdapter adapter = new SimpleAdapter(
                     WJActivity.this, listItems, R.layout.list_item,
                     new String[] { "filename", "icon", "modify" }, new int[] {
                             R.id.file_name, R.id.icon, R.id.file_modify });
     
                 // 填充数据集
             lvFiles.setAdapter(adapter);
     
                 try {
                     tvpath.setText("当前路径为:" + currentParent.getCanonicalPath());
                 } catch (Exception e) {
                     e.printStackTrace();
                 }
     
         }
     }

    布局文件:

    View Code
     <?xml version="1.0" encoding="utf-8"?>
     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent"
         android:orientation="vertical" >
         <TextView
             android:id="@+id/tvpath"
             android:layout_gravity="center_horizontal"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
             android:textColor="#ff0000"
             android:textSize="20dip"
           />
           <Button android:id="@+id/btRoot"
                 android:layout_width="fill_parent"
                 android:layout_height="wrap_content"
                 android:text="回到根目录"
                 android:layout_gravity="center"/>
           <Button android:id="@+id/btnParent"
                 android:layout_width="fill_parent"
                 android:layout_height="wrap_content"
                 android:text="回到上一层目录"
                 android:paddingTop="20dip"
                 android:layout_gravity="center"/>
     
         <ListView android:id="@+id/files"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content" 
             >     
         </ListView>     
     </LinearLayout>

    listview布局

    View Code
     <?xml version="1.0" encoding="utf-8"?>
     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent"
         android:orientation="horizontal"  
         android:padding="5dip" >   
         <ImageView android:id="@+id/icon"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:paddingLeft="10dp"
             />
         <LinearLayout android:orientation="vertical"
             android:layout_width="wrap_content"    
             android:layout_height="wrap_content"
             >
             <TextView android:id="@+id/file_name"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:textSize="16dp"
             android:gravity="center_vertical"     
             />      
              <TextView android:id="@+id/file_modify"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:textSize="16dp"
             android:gravity="center_vertical"    
             />     
         </LinearLayout>
        
     </LinearLayout>

    效果图:

  • 相关阅读:
    【队列应用一】随机迷宫|随机起点终点*最短路径算法
    【堆栈应用二】迷宫算法,可直接动态运行
    【堆栈应用一】一个数divided=几个最小质因数的乘积(时间复杂度On)
    MyEclipse2014中Java类右键Run as没有JUnit Test
    C++中break/Continue,exit/return的理解
    windows下用C++修改本机IP地址
    windows下注册表的操作
    详解Java的Spring框架中的注解的用法
    什么是Java Bean
    JS windows对象的top属性
  • 原文地址:https://www.cnblogs.com/fx2008/p/3137990.html
Copyright © 2011-2022 走看看