Android中如何通过文件路径判断是否是同一文件
2015-05-08 16:30
399 查看
最近在处理自动扫描文件时,有些手机会有重复文件显示出来问题。经过多方分析。
发现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());
}
发现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());
}
相关文章推荐
- Android.mk如何判断文件是否存在
- android 通过文件路径,判断文件大小
- Android 视频开发中如何通过url或者本地视频文件路径获得视频的第一帧图片
- Android如何通过URI获取文件路径示例代码
- Android之如何判断定位是否开启及定位模式
- Powershell 脚本判断制定路径下文件是否存在(来源于网络-转载)
- Android之通过ActivityLifecycleCallbacks判断程序是否运行在后台
- C# 如何判断指定文件是否正被其它程序使用
- 如何通过PHP判断年份是否是闰年----两种方法
- Android如何获取assets或者raw目录的视频文件路径播放视频
- Android如何判断NavigationBar是否显示(获取屏幕真实的高度)
- java ftp上传文件中,如何判断文件是否被打开
- android 如何判断点是否在多边形内
- 通过判断浏览器的userAgent,用正则来判断手机是否是ios(苹果)和Android(安卓)客户端
- JAVA中如何判断文件或文件夹是否存在
- 通过DOS头判断一个文件是否为PE文件
- 在Android中如何判断NFC是否启用
- 14、Android开发基础之通过系统提供的方法获取到保存文件的路径
- JS判断window本地路径地址和网络url地址文件时是否存在
- VB学习8_VBA如何模糊判断包含某关键字的文件是否存在?