当前位置: 移动技术网 > IT编程>移动开发>Android > Android 文件选择器详解及实例代码

Android 文件选择器详解及实例代码

2019年07月24日  | 移动技术网IT编程  | 我要评论

wwe2014年6月30日,电脑开机蓝屏,3u8925

     本文给大家讲解下android文件选择器的使用。实际上就是获取用户在sd卡中选择的文件或文件夹的路径,这很像c#中的openfiledialog控件。

       此实例的实现过程很简单,这样可以让大家快速的熟悉android文件选择器,提高开发效率。

       网上曾经见到过一个关于文件选择器的实例,很多人都看过,本实例是根据它修改而成的,但更容易理解,效率也更高,另外,本实例有自己的特点:

       1、监听了用户按下back键的事件,使其返回上一层目录。

       2、针对不同的文件类型(文件vs文件夹 , 目标文件vs其他文件)做了特殊处理。

       知识点一、 file 类的使用

       文件选择器的主要功能是:浏览文件\文件夹、文件类型等;都是通过java file类来实现的。

       知识点二、调用方法说明  

       使用了startactivityforresult()发起调用以及onactivityresult()方法接收回调后的信息。

       先贴上效果图如下:

       其他的也没什么好说了,大家看看代码注释吧,很简单。

       filechooseractivity.java 实现文件选择的类 。

java代码

public class copyoffilechooseractivity extends activity { 
   
  private string msdcardrootpath ; //sdcard 根路径 
  private string mlastfilepath ;  //当前显示的路径 
   
  private arraylist<fileinfo> mfilelists ; 
  private filechooseradapter madatper ; 
   
  //配置适配器 
  private void setgridviewadapter(string filepath) { 
    updatefileitems(filepath); 
    madatper = new filechooseradapter(this , mfilelists); 
    mgridview.setadapter(madatper); 
  } 
  //根据路径更新数据,并且通知adatper数据改变 
  private void updatefileitems(string filepath) { 
    mlastfilepath = filepath ; 
    mtvpath.settext(mlastfilepath); 
     
    if(mfilelists == null) 
      mfilelists = new arraylist<fileinfo>() ; 
    if(!mfilelists.isempty()) 
      mfilelists.clear() ; 
     
    file[] files = folderscan(filepath); 
    if(files == null)  
      return ; 
    for (int i = 0; i < files.length; i++) { 
      if(files[i].ishidden()) // 不显示隐藏文件 
        continue ; 
       
      string fileabsolutepath = files[i].getabsolutepath() ; 
      string filename = files[i].getname(); 
      boolean isdirectory = false ; 
      if (files[i].isdirectory()){ 
        isdirectory = true ; 
      } 
      fileinfo fileinfo = new fileinfo(fileabsolutepath , filename , isdirectory) ; 
      //添加至列表 
      mfilelists.add(fileinfo); 
    } 
    //when first enter , the object of madatper don't initialized 
    if(madatper != null) 
      madatper.notifydatasetchanged(); //重新刷新 
  } 
  //获得当前路径的所有文件 
  private file[] folderscan(string path) { 
    file file = new file(path); 
    file[] files = file.listfiles(); 
    return files; 
  } 
  private adapterview.onitemclicklistener mitemclicklistener = new onitemclicklistener() { 
    public void onitemclick(adapterview<?> adapterview, view view, int position, 
        long id) { 
      fileinfo fileinfo = (fileinfo)(((filechooseradapter)adapterview.getadapter()).getitem(position)); 
      if(fileinfo.isdirectory())  //点击项为文件夹, 显示该文件夹下所有文件 
        updatefileitems(fileinfo.getfilepath()) ; 
      else if(fileinfo.ispptfile()){ //是ppt文件 , 则将该路径通知给调用者 
        intent intent = new intent(); 
        intent.putextra(extra_file_chooser, fileinfo.getfilepath()); 
        setresult(result_ok , intent); 
        finish(); 
      } 
      else {  //其他文件..... 
        toast(gettext(r.string.open_file_error_format)); 
      } 
    } 
  }; 
  public boolean onkeydown(int keycode , keyevent event){ 
    if(event.getaction() == keyevent.action_down && event.getkeycode() 
      == keyevent.keycode_back){ 
      backprocess();   
      return true ; 
    } 
    return super.onkeydown(keycode, event); 
  } 
  //返回上一层目录的操作 
  public void backprocess(){ 
    //判断当前路径是不是sdcard路径 , 如果不是,则返回到上一层。 
    if (!mlastfilepath.equals(msdcardrootpath)) {  
      file thisfile = new file(mlastfilepath); 
      string parentfilepath = thisfile.getparent(); 
      updatefileitems(parentfilepath); 
    }  
    else {  //是sdcard路径 ,直接结束 
      setresult(result_canceled); 
      finish(); 
    } 
  } 
} 

       此实例的界面稍显简陋,不过大家可以在此基础上完善,添加其他功能。本实例代码下载地址:

http://download.csdn.net/detail/qinjuning/4825392。

        感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网