Android之SD卡文件浏览器实现

public  class  SDFileExplorer  extends  Activity {
        private  TextView  text  ;
        private  ListView  listView  ;
      Button  parentBtn ;
        private  File  currentFile  ; // 记录当前的父文件夹
        private  File[]  currentFiles  ; // 记录当前文件下所有的文件数组
        boolean  hasSDcard  ;  // 是否有内存卡
      File  sdPath ;  // 得到内存卡的路径

        @Override
        protected  void  onCreate(Bundle savedInstanceState) {
              super .onCreate(savedInstanceState);
            setContentView(R.layout.  activity_sdfile_explorer );
            initUI();  // 初始化UI
            onclick();
      }

        private  void  initUI() {
              text  = (TextView) findViewById(R.id. file_path );
              listView  = (ListView) findViewById(R.id. file_list );
              parentBtn  = (Button) findViewById(R.id. parent );

              hasSDcard  = Environment.getExternalStorageState().equals(
                        Environment.  MEDIA_MOUNTED );
              sdPath  = Environment.getExternalStorageDirectory();
              // 第一次的时候判断如果有内存卡、那么父类为 sd卡、文件夹数组为SD卡下的所有文件
              if  ( hasSDcard  ) {
                    currentFile  =  sdPath  ;
                    currentFiles  =  currentFile  .listFiles();
                  inflateListView(  currentFiles );
            }
      }

        private  void  onclick() {
              listView .setOnItemClickListener( new  OnItemClickListener() {
                    @Override
                    public  void  onItemClick(AdapterView<?> parent, View view,
                                int  position,  long  id) {
                          if  ( currentFiles  [position].isFile())
                                return ;
                          // 获取用户点击的文件夹下的所有文件
                        File[] temp =  currentFiles [position].listFiles();
                          if  (temp ==  null  || temp. length  == 0) {
                              Toast. makeText(SDFileExplorer. this ,  "当前路径不可访问或该路径下没有文件"  ,
                                          20000).show();
                        }  else  {
                                // 用户当前点击的列表项作为父文件夹
                                currentFile  =  currentFiles  [position];
                                // 保存当前文件夹下内的全部文件和文件夹
                                currentFiles  = temp;
                                // 更新ListView
                              inflateListView(  currentFiles );
                        }
                  }
            });
              // 获取上一级目录的按钮
              parentBtn .setOnClickListener( new  OnClickListener() {

                    @Override
                    public  void  onClick(View v) {
                          try  {
                                if  (! currentFile .getCanonicalFile().equals( sdPath  )) {
                                      // 获取上一级目录
                                      currentFile  =  currentFile .getParentFile();
                                      // 列出当前文件夹下的所有文件
                                      currentFiles  =  currentFile .listFiles();
                                    inflateListView(  currentFiles );
                              }
                        }  catch  (IOException e) {
                                //  TODO  Auto-generated catch block
                              e.printStackTrace();
                        }
                  }
            });
      }

        private  void  inflateListView(File[] files) {
            List<Map<String, Object>> list =  new  ArrayList<Map<String, Object>>();
              for  ( int  i = 0; i < files. length ; i++) {
                  Map<String, Object> map =  new  HashMap<String, Object>();
                    // 如果当前File是文件夹,使用folder图标、否则是file图标
                    if  (files[i].isDirectory()) {
                        map.put(  "icon" , R.drawable. folder );
                  }  else  {
                        map.put(  "icon" , R.drawable. file );
                  }
                  map.put(  "fileName" , files[i].getName());
                  list.add(map);
            }
              // 添加适配为ListView
            SimpleAdapter adapter =  new  SimpleAdapter(getApplicationContext(),
                        list, R.layout.  line ,  new  String[] {  "icon" ,  "fileName"  },
                          new  int  [] { R.id. icon , R.id.  file_name  });
              listView .setAdapter(adapter);
              try  {
                    text .setText( "当前路径为:"  +  currentFile .getCanonicalPath());
            }  catch  (IOException e) {
                  e.printStackTrace();
            }

      }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值