过滤sd卡中隐藏的文件

我们在使用系统或者第三方文件浏览器软件时,这些软件都会把一些隐藏文件去掉,因为隐藏文件用户是打不开的,所以就会过滤掉,现在就做一个小功能怎么过滤掉系统的隐藏文件</span>


新建一个项目FileDemo

代码如下:

private void initUI() {
		if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
			File file = Environment.getExternalStorageDirectory();
			File[] listFiles = file.listFiles(new MyFileFilter());
			for(File listFile:listFiles){
				Log.e(TAG,listFile.getName());
			}
		}else{
			Log.e(TAG,"sd卡不存在");
		}
	}

MyFileFilter.java类是过滤带.开头的文件

/**
 * 文件过滤器
 * @author carpool
 */
public class MyFileFilter implements FileFilter {
	@Override
	public boolean accept(File file) {
		if(file.getName().startsWith(".")){
			return false;
		}
		return true;
	}
}
讲一下file类的 listFiles(FileFilter filter) api

 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录




### Android 设备外置 SD 存储路径获取方法 在 Android 应用程序中,为了访问外部存储设备上的数据,了解如何正确获取这些设备的路径至关重要。对于外置 SD 而言,`Environment.getExternalStorageDirectory()` 方法返回的是默认共享/公共存储空间的位置,并不一定指向实际的可移除媒体[^1]。 当目标是识别并定位真正的外置 SD 时,可以采用反射技术绕过标准 API 的限制,从而获得更精确的结果[^2]。然而需要注意的是,在较新的 Android 版本中,由于权限模型的变化以及隐私保护措施加强,这种方法可能不再适用或有效。 另一种更为可靠的方式是在特定版本上通过读取系统属性或者调用隐藏接口来实现对外置 SD 路径的探测。例如: ```java public static String getExternalSdCardPath(Context context) { StorageManager storageManager = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE); try { Class<?>[] paramClasses = {}; Method getVolumeList = StorageManager.class.getMethod("getVolumeList", paramClasses); getVolumeList.setAccessible(true); Object[] result = (Object[]) getVolumeList.invoke(storageManager, new Object[]{}); for (Object volume : result) { Field pathField = volume.getClass().getField("path"); String path = (String) pathField.get(volume); // 这里可以根据实际情况过滤掉内部存储卷 if (!Environment.isExternalStorageRemovable()) continue; return path; } } catch (Exception e) { Log.e("Error getting external SD card path", "", e); } return null; } ``` 此代码片段展示了如何利用 Java 反射机制遍历 `StorageManager` 中定义的所有存储卷,并从中筛选出代表外置 SD 的那个。值得注意的是,这段代码依赖于未公开的 API 接口,这可能会导致兼容性和稳定性方面的问题,尤其是在不同制造商定制 ROM 上的表现差异较大。 另外一个重要提示在于,即使成功找到了对应的路径,也应当使用 `getExternalStorageState(String)` 或者尝试创建测试文件的方式来验证该位置当前是否处于挂载状态并且可供写入操作[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值