Android文件File
2020-10-12 本文已影响0人
Anwfly
一、SD的使用SD卡文件权限
sdk卡的读写权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
二、SD的使用SD卡挂载状态判断
//获取sdk 的挂载状态
String status = Environment.getExternalStorageState();
// 判断sdk 的挂载状态
if (status.equalsIgnoreCase(Environment.MEDIA_MOUNTED)) {
// 此时SD是可读写的
Toast.makeText(MainActivity.this, "SD卡存在", Toast.LENGTH_LONG).show();
} else if (status.equalsIgnoreCase(Environment.MEDIA_MOUNTED_READ_ONLY)) {
Toast.makeText(MainActivity.this, "虽然SD存在,但是为只读状态", Toast.LENGTH_LONG).show();
} else if (status.equalsIgnoreCase(Environment.MEDIA_REMOVED)) {
Toast.makeText(MainActivity.this, "SD不存在", Toast.LENGTH_LONG).show();
} else if (status.equalsIgnoreCase(Environment.MEDIA_SHARED)) {
Toast.makeText(MainActivity.this, "虽然SD卡存在,但是正与PC等相连接", Toast.LENGTH_LONG).show();
} else if (status.equalsIgnoreCase(Environment.MEDIA_BAD_REMOVAL)) {
Toast.makeText(MainActivity.this, "SD卡在挂载状态下被错误取出", Toast.LENGTH_LONG).show();
} else if (status.equalsIgnoreCase(Environment.MEDIA_CHECKING)) {
Toast.makeText(MainActivity.this, "正在检查SD卡", Toast.LENGTH_LONG).show();
} else if (status.equalsIgnoreCase(Environment.MEDIA_NOFS)) {
Toast.makeText(MainActivity.this, "虽然SD卡存在,但其文件系统不被支持", Toast.LENGTH_LONG).show();
} else if (status.equalsIgnoreCase(Environment.MEDIA_UNMOUNTABLE)) {
Toast.makeText(MainActivity.this, "虽然SD卡存在,但是无法被挂载", Toast.LENGTH_LONG).show();
} else if (status.equalsIgnoreCase(Environment.MEDIA_UNMOUNTED)) {
Toast.makeText(MainActivity.this, "虽然SD卡存在,但是未被挂载", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(MainActivity.this, "其他原因", Toast.LENGTH_LONG).show();
}
三、SD的使用SD卡根目录文件路径获取 File使用(文件夹和文件的创建)
//get External 外置 Storage 存储 State 状态
// 环境操作类 获取 sdk 路径 判断sdk 的状态
String state = Environment.getExternalStorageState();
if( state.equalsIgnoreCase(Environment.MEDIA_MOUNTED)){
Toast.makeText(MainActivity.this, "sdk存在", Toast.LENGTH_LONG).show();
/// Directory dir 目录 文件夹
//获得 sdk 的 路径
// f.getAbsolutePath() 获取 文件 或者 文件夹的 绝对路径
File f = Environment.getExternalStorageDirectory();
Log.i("tag", "===> "+f.getAbsolutePath());
//创建文件对象
File file = new File(f,"abcd.txt");
try {
//创建文件
boolean createNewFile = file.createNewFile();
Log.i("tag", "createNewFile====> "+createNewFile);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
四、SD的使用遍历指定SD卡目录下面所有文件(递归以及文件过滤器)
//递归 方法 调用自身 注意:入口 出口 递归不能太深 不然会内存溢出
File f = Environment.getExternalStorageDirectory();
//getText(f);
getTextFilter(f);
// 递归方法 查询所有符合条件的内容(本案例是查找后缀为 .png 的文件)
public void getText(File f){
//获得 它里面的所有文件和 文件夹对象
File[] listFiles = f.listFiles();
if(listFiles!=null){
for (File file : listFiles) {
// 遍历 判断 根目录下 所有文件 和文件夹对象
// 同时 是文件 以 .txt结尾 输出
if( file.isFile() && file.getName().endsWith(".png")){
System.out.println(file.getName());
// 存入 集合 交给适配器
}else{// 是文件夹 继续打开 获得 它里面的所有文件和 文件夹对象
getText(file);
}
}
}
}
// 使用过滤器 递归
public void getTextFilter(File f){
//获得 它里面的所有文件和 文件夹对象
if(f!=null){
File[] listFiles = f.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
if(pathname.isFile() && pathname.getName().endsWith(".png")){
//System.out.println(pathname.getName());
return true;
}else{
getTextFilter(pathname);
}
return false;
}
});
if(listFiles!=null){
for (File file : listFiles) {
System.out.println(file.getName());
}
}
}
}