Android中如何通过文件路径判断是否是同一文件

最近在处理自动扫描文件时,有些手机会有重复文件显示出来问题。经过多方分析。


发现Android的sd卡管理乱得不是一点半点。在有些手机上,只有/mnt/sdcard0存在,在有些手机上,会有/mnt/emulated/0和/mnt/sdcard0存在,且这二个是同一目录,后面的是前面真实路径的软链接目录,在4.2系统后的手机上,会发现有更奇葩的情况出现,会存在/mnt/emulated/0和/mnt/emulated/legacy和/mnt/sdcard0存在,且指向的也是同一目录。而在一些较新的华为手机上,我发现在上面三个目录之外,还存在一个/mnt/sdcard1目录,这个目录是真实外置sd卡的根目录,与上面三目录无关系。


在这种情况下,如果有一个文件路径是/mnt/sdcard0/pictures/pic.jpg,另一个是/mnt/sdcard1/pictures/pic.jpg,再有一个是/mnt/emulated/0/pictures/pic.jpg,最后变态再有一个/mnt/emulated/legacy/pictures/pic.jpg后,如何在不控制顺序的情况下,准确判断出哪二个文件是指向的同一文件,哪二个文件是真实物理上保存的不同目录下同名文件。就在算法上比较麻烦。因先来的文件路径不可控。


最后我找到的较笨办法是:

1.把第一个得到的目录进行忽略列表保存时,把路径进行替换保存,把软链接目录替换成对应的真实目录地址,比如,把得到的/mnt/sdcard0/***替换成/mnt/emulated/0/***进行保存。后面来的路径,都按此规则转换后,再进行路径是否相同的比较。使用到的函数是:

	public static boolean isSymlink(File file) throws IOException {
		if (file == null)
			throw new NullPointerException("File must not be null");
		File canon;
		if (file.getParent() == null) {
			canon = file;
		} else {
			File canonDir = file.getParentFile().getCanonicalFile();
			canon = new File(canonDir, file.getName());
		}
		return !canon.getCanonicalFile().equals(file.getAbsoluteFile());
	}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值