欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android编写文件浏览器简单实现

程序员文章站 2024-03-01 16:44:16
有时候我们保存文件总会用到文件浏览器功能.那么今天博主带大家做一个。 那么开始,浏览文件,我们就需要写一个文件工具类。 import java.io.fil...

有时候我们保存文件总会用到文件浏览器功能.那么今天博主带大家做一个。

那么开始,浏览文件,我们就需要写一个文件工具类。

import java.io.file; 
import java.util.arraylist; 
import java.util.hashmap; 
import java.util.list; 
import java.util.map; 
 
import android.util.log; 
 
public class fileutils { 
  /** 
   * 获取当前目录下的所有文件或文件夹 
   * @param path 路径 
   * @return 
   */ 
  public static list<map<string,object>> getpathfilslist(string path) { 
    list<map<string,object>> list = new arraylist<map<string,object>>(); 
    list<map<string,object>> filelist = new arraylist<map<string,object>>(); 
    try { 
      string[] files = new file(path).list(); 
      for(string file : files){ 
        map<string, object> map = new hashmap<string, object>(); 
        if(new file(path+file).isdirectory()){ 
          map.put("isdirectory",2); 
          map.put("filename", file); 
           
          list.add(map); 
        }else { 
          map.put("isdirectory", 1); 
          map.put("filename", file); 
           
          filelist.add(map); 
        } 
       
         
      } 
      list.addall(filelist); 
      return list; 
    } catch (exception e) { 
      // todo: handle exception 
      e.printstacktrace(); 
      return null; 
    } 
  } 
} 

这里会将文件和文件夹区分出来,便于显示区分。

之后我们需要用到一个适配器,用于显示这些数据的listview

private class filebrowseradapter extends baseadapter{ 
    private list<map<string, object>> filelist; 
    private context context; 
 
    public filebrowseradapter(context context, 
        list<map<string, object>> filelist) { 
      this.filelist = filelist; 
      this.context = context; 
    } 
 
    @override 
    public int getcount() { 
      return filelist == null ? 0 : filelist.size(); 
    } 
 
    @override 
    public object getitem(int position) { 
      return filelist.get(position); 
    } 
 
    @override 
    public long getitemid(int position) { 
      return position; 
    } 
 
    @suppresslint("inflateparams") 
    @override 
    public view getview(int position, view convertview, viewgroup parent) { 
 
      layoutinflater minflater = layoutinflater 
          .from(getapplicationcontext()); 
      view view = null; 
      view = minflater.inflate(r.layout.file_list_item, null); 
      imageview image = (imageview) view 
          .findviewbyid(r.id.file_list_item_image); 
      if (integer 
          .parseint(filelist.get(position).get("isdirectory") + "") == 2) 
        image.setimageresource(r.drawable.folder); 
      else if (integer.parseint(filelist.get(position).get("isdirectory") 
          + "") == 1) 
        image.setimageresource(r.drawable.documents); 
      textview textview = (textview) view 
          .findviewbyid(r.id.file_list_item_testview); 
      textview.settextcolor(color.black); 
      textview.settext(filelist.get(position).get("filename") + ""); 
      return view; 
 
    } 
   
  } 

最后我们需要实现这些

dir = environment.getexternalstoragedirectory() 
        .getabsolutepath() + "/"; 
    filelistview = (listview) findviewbyid(r.id.file_listview); 
    listitemclicklistener = new filelistitemclicklistener(); 
//   //设置点击事件 
    filelistview.setonitemclicklistener(listitemclicklistener); 
    filelist = fileutils.getpathfilslist(dir); 
    if (new file(dir).getparent() != null) { 
      map<string, object> map = new hashmap<string, object>(); 
      map.put("isdirectory", 0); 
      map.put("filename", new file(dir).getparent()); 
      filelist.add(0, map); 
 
    } 
    filebrowseradapter phonefilebrowseradapter = new filebrowseradapter( 
        getapplicationcontext(), filelist); 
    filelistview.setadapter(phonefilebrowseradapter); 

效果图:

Android编写文件浏览器简单实现

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。