这个工具类,可以很方便得到想要文件的对象或属性。
下面的具体代码和详细介绍。
package com.android.utils;
import android.os.Environment;
import android.os.StatFs;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
/**
* 本类实现一些File文件的实际功能
* 包括文件的遍历,文件的大小计算
* 这里主要是对存储器的应用
* SD卡的路径:Environment.getExternalStorageDirectory()
* 其中包含的方法有:
* List<File> getAllFile(); //获取手机SD卡根目录下的所有文件对象
* List<File> getAllFile(File dir) //获取手机指定目录下的所有文件对象
* List<File> getAllPicture() //获取手机SD卡根目录下的所有图片文件对象
* List<File> getAllPicture(File dir)//获取手机指定目录下的所有图片文件对象
* List<File> getAllFile(File dir,String endWith)//获取手机指定目录下的所有的某个类型文件对象
* List<File> getAllFile(File dir,String[] endWith)//获取手机指定目录下的所有的某个类型文件对象,这里可以传两个或三个元素的集合
* long getSDCardSize() //获取手机SD卡根的空间的大小
* long getSDCardAvailableSize() //获取手机SD卡根的可用的大小
* long getInternalSize() //获取手机内存空间的大小
* long getInternalAvailableSize() //获取手机内存空间的可用空间大小
*/
public class FileUtils {
/**
* 获得根目录下所有的文件的对象
*/
public static final List<File> getAllFile() {
List<File> files = new ArrayList<>();
getFileFromDir(Environment.getExternalStorageDirectory(), files);
return files;
}
/**
* 获得指定目录下所有的文件的对象
*/
public static final List<File> getAllFile(File dir) {
List<File> files = new ArrayList<>();
getFileFromDir(dir, files);
return files;
}
/**
* 递归遍历文件夹的方法
*/
public static final void getFileFromDir(File dir, List<File> fileList) {
File[] files = dir.listFiles();
if (files == null)
return;
for (File file : files) {
if (file.isDirectory())
getFileFromDir(file, fileList);
fileList.add(file);
}
}
/**
* 获得指定目录下的所有的图片
*/
public static final List<File> getAllPicture(File dir) {
List<File> files = getAllFile(dir);
List<File> imgList = new ArrayList<>();
for (File file : files) {
if (file.getName().endsWith(".png") || file.getName().endsWith(".jpg"))
imgList.add(file);
}
return imgList;
}
/**
* 获得指定目录下的所有的某一个类型的文件
*/
public static final List<File> getAllFile(File dir, String endWith) {
List<File> files = getAllFile(dir);
List<File> imgList = new ArrayList<>();
for (File file : files) {
if (file.getName().endsWith(endWith))
imgList.add(file);
}
return imgList;
}
/**
* 获得指定目录下的所有的某一个类型的文件
*/
public static final List<File> getAllFile(File dir, String[] endWith) {
List<File> files = getAllFile(dir);
List<File> imgList = new ArrayList<>();
switch (endWith.length) {
case 2: //两个元素的情况
for (File file : files) {
if (file.getName().endsWith(endWith[0]) || file.getName().endsWith(endWith[1]))
imgList.add(file);
}
break;
case 3: //三个元素的情况
for (File file : files) {
if (file.getName().endsWith(endWith[0]) || file.getName().endsWith(endWith[1])
|| file.getName().endsWith(endWith[2]))
imgList.add(file);
}
break;
}
return imgList;
}
/**
* 获得根目录下的所有图片
*/
public static final List<File> getAllPicture() {
return getAllPicture(Environment.getExternalStorageDirectory());
}
/**
* 获取SD卡总空间
*/
public static long getSDCardSize() {
StatFs statFs = new StatFs(Environment.getExternalStorageDirectory().getAbsolutePath());
int block = statFs.getBlockSize();
int count = statFs.getBlockCount();
return block * count;
}
/**
* 获取SD卡可用空间
*/
public static long getSDCardAvailableSize() {
StatFs statFs = new StatFs(Environment.getExternalStorageDirectory().getAbsolutePath());
int block = statFs.getBlockSize();
int count = statFs.getAvailableBlocks();
return block * count;
}
/**
* 获取手机内存空间
* 不一定可用?
*/
public static long getInternalSize() {
StatFs statFs = new StatFs(Environment.getDataDirectory().getAbsolutePath());
int block = statFs.getBlockSize();
int count = statFs.getBlockCount();
return block * count;
}
/**
* 获取手机内存可用的空间
*/
public static long getInternalAvailableSize() {
StatFs statFs = new StatFs(Environment.getDataDirectory().getAbsolutePath());
int block = statFs.getBlockSize();
int count = statFs.getAvailableBlocks();
return block * count;
}
}
上面的内容也可以自己进行适当的扩展。
使用SD卡的某些功能可能要添加权限,
同时也要确定手机或模拟器是否存在SD卡。文件路径是进行文件操作的最基础的条件。