前言
有需要所以学习了一下关于读取本地文件目录的知识,自己也仿照着写了个。哈哈,初学花了不少时间,感谢原文博客的分享!不废话见图。
大家如果有学习需要可以去我GitHub下载,下载的兄弟给我右上角随手一个Star如何,感谢感谢。地址https://github.com/jianhaojiang/TestApp
下面是研究内容
效果图:
- package wuwang.tools.utils;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.text.DecimalFormat;
- import java.util.ArrayList;
- import java.util.Comparator;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import 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 手机上的文件夹