先看看效果图:
package wuwang.tools.utils; @R_419_5565@ java.io.file; @R_419_5565@ java.io.fileinputStream; @R_419_5565@ java.io.fileNotFoundException; @R_419_5565@ java.io.IOException; @R_419_5565@ java.text.DecimalFormat; @R_419_5565@ java.util.ArrayList; @R_419_5565@ java.util.Comparator; @R_419_5565@ java.util.HashMap; @R_419_5565@ java.util.List; @R_419_5565@ java.util.Map; @R_419_5565@ androID.os.Environment; /** * 用于获取手机的文件夹及文件的工具类,如果权限允许,可以获取手机上任意路径的文件列表 * GetfilesUtils使用的是懒汉式单例模式,线程安全 *@author wuwang *@since 2014.11 */ public class GetfilesUtils { public static final String file_TYPE_FolDER="wFl2d"; public static final String file_INFO_name="fname"; public static final String file_INFO_ISFolDER="fIsDir"; public static final String file_INFO_TYPE="ffileType"; public static final String file_INFO_NUM_SONDirs="fSonDirs"; public static final String file_INFO_NUM_SONfileS="fSonfiles"; public static final String file_INFO_PATH="fPath"; private static GetfilesUtils gfu; private GetfilesUtils(){ } /** * 获取GetfilesUtils实例 * @return GetfilesUtils **/ public static synchronized GetfilesUtils getInstance(){ if(gfu==null){ gfu=new GetfilesUtils(); } return gfu; } /** * 获取文件path文件夹下的文件列表 * @see #getSonNode(String) * @param path 手机上的文件夹 * @return path文件夹下的文件列表的信息,信息存储在Map中,Map的key的列表如下:<br /> * file_INFO_name : String 文件名称 <br /> * file_INFO_ISFolDER: boolean 是否为文件夹 <br /> * file_INFO_TYPE: string 文件的后缀 <br /> * file_INFO_NUM_SONDirs : int 子文件夹个数 <br /> * file_INFO_NUM_SONfileS: int 子文件个数 <br /> * file_INFO_PATH : String 文件的绝对路径 <br /> **/ public List<Map<String,Object>> getSonNode(file path){ if(path.isDirectory()){ List<Map<String,Object>> List=new ArrayList<Map<String,Object>>(); file[] files=path.Listfiles(); if(files!=null){ for(int i=0;i<files.length;i++){ Map<String,Object> fileInfo=new HashMap<String,Object>(); fileInfo.put(file_INFO_name,files[i].getname()); if(files[i].isDirectory()){ fileInfo.put(file_INFO_ISFolDER,true); file[] bfiles=files[i].Listfiles(); if(bfiles==null){ fileInfo.put(file_INFO_NUM_SONDirs,0); fileInfo.put(file_INFO_NUM_SONfileS,0); }else{ int getNumOfDir=0; for(int j=0;j<bfiles.length;j++){ if(bfiles[j].isDirectory()){ getNumOfDir++; } } fileInfo.put(file_INFO_NUM_SONDirs,getNumOfDir); fileInfo.put(file_INFO_NUM_SONfileS,bfiles.length-getNumOfDir); } fileInfo.put(file_INFO_TYPE,file_TYPE_FolDER); }else{ fileInfo.put(file_INFO_ISFolDER,false); fileInfo.put(file_INFO_NUM_SONDirs,0); fileInfo.put(file_INFO_NUM_SONfileS,0); fileInfo.put(file_INFO_TYPE,getfileType(files[i].getname())); } fileInfo.put(file_INFO_PATH,files[i].getabsolutefile()); List.add(fileInfo); } return List; }else{ return null; } }else{ return null; } } /** * 获取文件pathStr文件夹下的文件列表 * @see #getSonNode(file) * @param pathStr 手机上的文件夹的绝对路径 * @return pathStr文件夹下的文件列表的信息,信息存储在Map中,Map的key的列表如下:<br /> * file_INFO_name : String 文件名称 <br /> * file_INFO_ISFolDER: boolean 是否为文件夹 <br /> * file_INFO_TYPE: string 文件的后缀 <br /> * file_INFO_NUM_SONDirs : int 子文件夹个数 <br /> * file_INFO_NUM_SONfileS: int 子文件个数 <br /> * file_INFO_PATH : String 文件的绝对路径 <br /> **/ public List<Map<String,Object>> getSonNode(String pathStr){ file path=new file(pathStr); return getSonNode(path); } /** * 获取文件path文件或文件夹的兄弟节点文件列表 * @see #getbrotherNode(String) * @param path 手机上的文件夹 * @return path文件夹下的文件列表的信息,信息存储在Map中,Map的key的列表如下:<br /> * file_INFO_name : String 文件名称 <br /> * file_INFO_ISFolDER: boolean 是否为文件夹 <br /> * file_INFO_TYPE: string 文件的后缀 <br /> * file_INFO_NUM_SONDirs : int 子文件夹个数 <br /> * file_INFO_NUM_SONfileS: int 子文件个数 <br /> * file_INFO_PATH : String 文件的绝对路径 <br /> **/ public List<Map<String,Object>> getbrotherNode(file path){ if(path.getParentfile()!=null){ return getSonNode(path.getParentfile()); }else{ return null; } } /** * 获取文件path文件或文件夹的兄弟节点文件列表 * @see #getbrotherNode(file) * @param path 手机上的文件夹 * @return path文件夹下的文件列表的信息,信息存储在Map中,Map的key的列表如下:<br /> * file_INFO_name : String 文件名称 <br /> * file_INFO_ISFolDER: boolean 是否为文件夹 <br /> * file_INFO_TYPE: string 文件的后缀 <br /> * file_INFO_NUM_SONDirs : int 子文件夹个数 <br /> * file_INFO_NUM_SONfileS: int 子文件个数 <br /> * file_INFO_PATH : String 文件的绝对路径 <br /> **/ public List<Map<String,Object>> getbrotherNode(String pathStr){ file path=new file(pathStr); return getbrotherNode(path); } /** * 获取文件或文件夹的父路径 * @param file path文件或者文件夹 * @return String path的父路径 **/ public String getParentPath(file path){ if(path.getParentfile()==null){ return null; }else{ return path.getParent(); } } /** * 获取文件或文件的父路径 * @param String pathStr文件或者文件夹路径 * @return String pathStr的父路径 **/ public String getParentPath(String pathStr){ file path=new file(pathStr); if(path.getParentfile()==null){ return null; }else{ return path.getParent(); } } /** * 获取sd卡的绝对路径 * @return String 如果sd卡存在,返回sd卡的绝对路径,否则返回null **/ public String getSdpath(){ String sdcard=Environment.getExternalStorageState(); if(sdcard.equals(Environment.MEDIA_MOUNTED)){ return Environment.getExternalStorageDirectory().getabsolutePath(); }else{ return null; } } /** * 获取一个基本的路径,一般应用创建存放应用数据可以用到 * @return String 如果SD卡存在,返回SD卡的绝对路径,如果SD卡不存在,返回AndroID数据目录的绝对路径 **/ public String getBasePath(){ String basePath=getSdpath(); if(basePath==null){ return Environment.getDataDirectory().getabsolutePath(); }else{ return basePath; } } /** * 获取文件path的大小 * @return String path的大小 **/ public String getfileSize(file path) throws IOException{ if(path.exists()){ DecimalFormat df = new DecimalFormat("#.00"); String sizeStr=""; fileinputStream fis=new fileinputStream(path); long size=fis.available(); fis.close(); if(size<1024){ sizeStr=size+"B"; }else if(size<1048576){ sizeStr=df.format(size/(double)1024)+"KB"; }else if(size<1073741824){ sizeStr=df.format(size/(double)1048576)+"MB"; }else{ sizeStr=df.format(size/(double)1073741824)+"GB"; } return sizeStr; }else{ return null; } } /** * 获取文件fpath的大小 * @return String path的大小 **/ public String getfileSize(String fpath){ file path=new file(fpath); if(path.exists()){ DecimalFormat df = new DecimalFormat("#.00"); String sizeStr=""; long size=0; try { fileinputStream fis = new fileinputStream(path); size=fis.available(); fis.close(); } catch (fileNotFoundException e) { // Todo auto-generated catch block e.printstacktrace(); return "未知大小"; } catch (IOException e) { // Todo auto-generated catch block e.printstacktrace(); return "未知大小"; } if(size<1024){ sizeStr=size+"B"; }else if(size<1048576){ sizeStr=df.format(size/(double)1024)+"KB"; }else if(size<1073741824){ sizeStr=df.format(size/(double)1048576)+"MB"; }else{ sizeStr=df.format(size/(double)1073741824)+"GB"; } return sizeStr; }else{ return "未知大小"; } } /** * 根据后缀获取文件filename的类型 * @return String 文件的类型 **/ public String getfileType(String filename){ if(filename!=""&&filename.length()>3){ int dot=filename.lastIndexOf("."); if(dot>0){ return filename.substring(dot+1); }else{ return ""; } } return ""; } public Comparator<Map<String,Object>> defaultOrder() { final String orderBy0=file_INFO_ISFolDER; final String orderBy1=file_INFO_TYPE; final String orderBy2=file_INFO_name; Comparator<Map<String,Object>> order=new Comparator<Map<String,Object>>() { @OverrIDe public int compare(Map<String,Object> lhs,Map<String,Object> rhs) { // Todo auto-generated method stub int left0=lhs.get(orderBy0).equals(true)?0:1; int right0=rhs.get(orderBy0).equals(true)?0:1; if(left0==right0){ String left1=lhs.get(orderBy1).toString(); String right1=rhs.get(orderBy1).toString(); if(left1.compareto(right1)==0){ String left2=lhs.get(orderBy2).toString(); String right2=rhs.get(orderBy2).toString(); return left2.compareto(right2); }else{ return left1.compareto(right1); } }else{ return left0-right0; } } }; return order; } }
使用方法:List<Map<String,Object>> List=GetfilesUtils.getInstance().getSonNode(file); //或其他方法
使用示例:
package wuwang.mypage.activity; @R_419_5565@ java.io.IOException; @R_419_5565@ java.util.ArrayList; @R_419_5565@ java.util.Collections; @R_419_5565@ java.util.HashMap; @R_419_5565@ java.util.List; @R_419_5565@ java.util.Map; @R_419_5565@ wuwang.ebookworm.R; @R_419_5565@ wuwang.tools.utils.GetfilesUtils; @R_419_5565@ androID.app.Activity; @R_419_5565@ androID.os.Bundle; @R_419_5565@ androID.vIEw.VIEw; @R_419_5565@ androID.vIEw.VIEw.OnClickListener; @R_419_5565@ androID.Widget.AdapterVIEw; @R_419_5565@ androID.Widget.AdapterVIEw.OnItemClickListener; @R_419_5565@ androID.Widget.ListVIEw; @R_419_5565@ androID.Widget.SimpleAdapter; @R_419_5565@ androID.Widget.TextVIEw; @R_419_5565@ androID.Widget.Toast; public class FolderActivity extends Activity implements OnItemClickListener,OnClickListener { private ListVIEw folderLv; private TextVIEw folderNowTv; private SimpleAdapter sAdapter; private List<Map<String,Object>> aList; private String basefile; private TextVIEw TitleTv; @OverrIDe protected voID onCreate(Bundle savedInstanceState) { // Todo auto-generated method stub super.onCreate(savedInstanceState); setContentVIEw(R.layout.mypage_folder); basefile=GetfilesUtils.getInstance().getBasePath(); TitleTv=(TextVIEw) findVIEwByID(R.ID.mTitle); TitleTv.setText("本地文件"); folderLv=(ListVIEw) findVIEwByID(R.ID.folder_List); folderNowTv=(TextVIEw) findVIEwByID(R.ID.folder_Now); folderNowTv.setText(basefile); folderNowTv.setonClickListener(this); aList=new ArrayList<Map<String,Object>>(); sAdapter=new SimpleAdapter(this,aList,R.layout.Listitem_folder,new String[]{"fimg","fname","fInfo"},new int[]{R.ID.folder_img,R.ID.folder_name,R.ID.folder_info}); folderLv.setAdapter(sAdapter); folderLv.setonItemClickListener(this); try { loadFolderList(basefile); } catch (IOException e) { // Todo auto-generated catch block e.printstacktrace(); } } private voID loadFolderList(String file) throws IOException{ List<Map<String,Object>> List=GetfilesUtils.getInstance().getSonNode(file); if(List!=null){ Collections.sort(List,GetfilesUtils.getInstance().defaultOrder()); aList.clear(); for(Map<String,Object> map:List){ String fileType=(String) map.get(GetfilesUtils.file_INFO_TYPE); Map<String,Object> gMap=new HashMap<String,Object>(); if(map.get(GetfilesUtils.file_INFO_ISFolDER).equals(true)){ gMap.put("fIsDir",true); gMap.put("fimg",R.drawable.filetype_folder ); gMap.put("fInfo",map.get(GetfilesUtils.file_INFO_NUM_SONDirs)+"个文件夹和"+ map.get(GetfilesUtils.file_INFO_NUM_SONfileS)+"个文件"); }else{ gMap.put("fIsDir",false); if(fileType.equals("txt")||fileType.equals("text")){ gMap.put("fimg",R.drawable.filetype_text); }else{ gMap.put("fimg",R.drawable.filetype_unkNow); } gMap.put("fInfo","文件大小:"+GetfilesUtils.getInstance().getfileSize(map.get(GetfilesUtils.file_INFO_PATH).toString())); } gMap.put("fname",map.get(GetfilesUtils.file_INFO_name)); gMap.put("fPath",map.get(GetfilesUtils.file_INFO_PATH)); aList.add(gMap); } }else{ aList.clear(); } sAdapter.notifyDataSetChanged(); folderNowTv.setText(file); } @OverrIDe public voID onItemClick(AdapterVIEw<?> parent,VIEw vIEw,int position,long ID) { // Todo auto-generated method stub try { if(aList.get(position).get("fIsDir").equals(true)){ loadFolderList(aList.get(position).get("fPath").toString()); }else{ Toast.makeText(this,"这是文件,处理程序待添加",Toast.LENGTH_SHORT).show(); } } catch (IOException e) { // Todo auto-generated catch block e.printstacktrace(); } } @OverrIDe public voID onClick(VIEw v) { // Todo auto-generated method stub if(v.getID()==R.ID.folder_Now){ try { String folder=GetfilesUtils.getInstance().getParentPath(folderNowTv.getText().toString()); if(folder==null){ Toast.makeText(this,"无父目录,待处理",Toast.LENGTH_SHORT).show(); }else{ loadFolderList(folder); } } catch (IOException e) { // Todo auto-generated catch block e.printstacktrace(); } } } }
页面的布局文件为:
<?xml version="1.0" enCoding="utf-8"?> <linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" androID:orIEntation="vertical" androID:background="@color/frame_main_bg" > <include layout="@layout/mypage_Title_folder"/> <TextVIEw androID:layout_wIDth="match_parent" androID:layout_height="40dp" androID:textcolor="#FFFFFF" androID:textSize="16sp" androID:gravity="center_vertical" androID:ellipsize="start" androID:singleline="true" androID:drawableleft="@drawable/folder_backupimg" androID:paddingleft="10dp" androID:drawablepadding="10dp" androID:ID="@+ID/folder_Now" androID:background="@color/frame_Title_bg_clk_color" /> <ListVIEw androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:ID="@+ID/folder_List" androID:divIDerHeight="1dp" androID:divIDer="@color/folder_List_divIDer" > </ListVIEw> </linearLayout>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。
总结以上是内存溢出为你收集整理的Android获取手机文件夹及文件列表的方法全部内容,希望文章能够帮你解决Android获取手机文件夹及文件列表的方法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)