记一次Android手机相册丢失事件及找回方案
2014-10-25 15:36
411 查看
今天打开相机拍照片,拍完发现DCIM目录下存了N久的照片全部没了~~泪奔。
Android目录存放删除文件的目录是LOST.DIR
进入之后会一大批以数字命名的不带后缀的文件,看文件大小发现最近的那几个文件大小和相片很相似,猜测可能是照片文件了~
果断把LOST.DIR里面所有的文件复制出来.用批处理全部重命名,加上后缀.jpg,熟悉的图片出来了~,其它手机上的文件丢失后可以用类似方式找回。
但是今天想记录的不仅仅是这些,删除后放到LOST.DIR目录里面的文件名全部被改掉了。上网百度了一下,相机照片有个exif信息,可以通过这个方法从LOST.DIR目录里过滤出相机照片。
思路是:遍历LOST.DIR里面所有的文件,检查文件的EXIF信息,如果没有即非照片,如果有再检测拍摄日期的字段,如果有该字段即相机拍摄的照片(可以用类似方式自由组合过滤),然后把该文件拷贝出来即可。
代码(需要用到metadata-extractor-2.6.4.jar包,链接:http://www.oschina.net/question/1_4456 Java与图像的EXIF信息
):
Android目录存放删除文件的目录是LOST.DIR
进入之后会一大批以数字命名的不带后缀的文件,看文件大小发现最近的那几个文件大小和相片很相似,猜测可能是照片文件了~
果断把LOST.DIR里面所有的文件复制出来.用批处理全部重命名,加上后缀.jpg,熟悉的图片出来了~,其它手机上的文件丢失后可以用类似方式找回。
但是今天想记录的不仅仅是这些,删除后放到LOST.DIR目录里面的文件名全部被改掉了。上网百度了一下,相机照片有个exif信息,可以通过这个方法从LOST.DIR目录里过滤出相机照片。
思路是:遍历LOST.DIR里面所有的文件,检查文件的EXIF信息,如果没有即非照片,如果有再检测拍摄日期的字段,如果有该字段即相机拍摄的照片(可以用类似方式自由组合过滤),然后把该文件拷贝出来即可。
代码(需要用到metadata-extractor-2.6.4.jar包,链接:http://www.oschina.net/question/1_4456 Java与图像的EXIF信息
):
package org.jkstudio.demo.imgexif; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Random; import com.drew.imaging.ImageMetadataReader; import com.drew.imaging.ImageProcessingException; import com.drew.metadata.Directory; import com.drew.metadata.Metadata; import com.drew.metadata.Tag; /*** * @Program Name : DailyAccumulation.org.jkstudio.demo.imgexif.ExifTester.java * @Written by : Jelon * @Creation Date : 2014年10月25日 下午3:20:18 * @version : v1.00 * @Description : 用于读取相片Exif信息Demo类 * @ModificationHistory * Who When What * -------- ---------- ------------------------------------------------ * Jelon 2014年10月25日下午3:20:18 TODO ***/ public class ExifTester { /** * @Enclosing_Method : checkImage * @Written by : Jelon * @Creation Date : 2014年10月25日 下午3:21:19 * @version : v1.00 * @Description : 检测图片的Exif信息 * * @param imagePath 图片文件路径 **/ private static void checkImage(String imagePath) { File file = new File(imagePath); Metadata metadata; try { metadata = ImageMetadataReader.readMetadata(file); for (Directory directory : metadata.getDirectories()) { for (Tag tag : directory.getTags()) { //以图片信息包含拍摄时间判断是否为照片 if (tag.getTagName() == "Date/Time Original") { System.out .println("time:" + "---" + tag + "---" + file);// 获取图片的所有信息 String year = tag.getDescription().substring(0, 4); String month = tag.getDescription().substring(5, 7); String day = tag.getDescription().substring(8, 10); String hour =tag.getDescription().substring(11, 13); String minute = tag.getDescription().substring(14, 16); String second = tag.getDescription().substring(17, 19); //long ranNum3 = Math.round(Math.random() * (999 - 1) + 100); long ranNum3 = 111; String destPhoName = "C360_"+year+"-"+month+"-"+day+"-"+hour+"-"+minute+"-"+second+"-"+ranNum3+".jpg"; String destDir = "H:/RestorePhoDir"; RestorePho2Dir(imagePath, destDir,destPhoName); //调用恢复图片函数 } } } } catch (IOException e) { e.printStackTrace(); } catch (ImageProcessingException e) { System.err.println("\n[FilePath] " + imagePath + "\n[The Error Message] " + e.getMessage()); } catch(NoClassDefFoundError e){ System.err.println( "\n[UNKNOW The Error Message] " + e.getMessage()); } } /** * @Enclosing_Method : RestorePho2Dir * @Written by : Jelon * @Creation Date : 2014年10月25日 下午2:47:05 * @version : v1.00 * @Description : 恢复照片到指定目录 * * @param imagePath 源图片路径 * @param destDir 要恢复到的目标文件夹 * @param destPhoName 恢复后的目标文件名 **/ private static void RestorePho2Dir(String imagePath, String destDir, String destPhoName) { try { int byteSum = 0; int byteRead = 0; InputStream inStream = null; FileOutputStream fs = null; File myImage = new File(imagePath); File myDestDir = new File(destDir); if (!myDestDir.exists() && !myDestDir.isDirectory()) { //如果要恢复的目标文件夹不存在,创建之 myDestDir.mkdir(); } if (myImage.exists()) { //复制图片到要恢复到的文件夹 inStream = new FileInputStream(myImage); fs = new FileOutputStream(new File(destDir + "/" + destPhoName)); byte[] buffer = new byte[1024]; while ((byteRead = inStream.read(buffer)) != -1) { byteSum += byteRead; //System.out.println(byteSum); fs.write(buffer, 0, byteRead); } inStream.close(); } } catch (Exception e) { System.err.println("\n[FilePath] " + imagePath + "\n[The Error Message] " + e.getMessage()); } } public static void main(String[] args) { File myPath = new File("H:/jpg3"); //LOST.DIR拷贝出来的文件放在这个里面 for (File file : myPath.listFiles()) { checkImage(file.getPath()); } } }
相关文章推荐
- android点击手机返回键触发事件
- Android调用手机拍照以及从相册选择照片
- APPRO IPNC方案 Android手机监控客户端---ffmpeg移植
- Android之各种事件触发方案
- [转]大话企业级Android应用开发实战 巧用GPS找回丢失的手机
- 手机丢了怎么办|找回丢失的手机|昨天买衣服的时候丢了刚买的手机,真扫兴,不过我想除了几个比较有用的方法帮你找回你的手机
- Android实现通过手机找回密码
- Android基于WIFI实现电脑和手机间数据传输的技术方案研究
- android视频录制、另一部手机实时观看方案
- Android手机桌面客户端任务项同步方案
- Android调用手机拍照以及从相册选择照片
- Android调用手机拍照以及从相册选择照片
- 一种“一次开发,不同手机平台都能运行”的应用开发方案
- Android基于WIFI实现电脑和手机间数据传输的技术方案研究
- Android 手机切屏事件
- android手机晃动事件实例
- GPS定位找回丢失的手机
- Android调用手机拍照以及从相册选择照片,剪裁
- Android调用手机拍照以及从相册选择照片
- android视频录制、另一部手机实时观看方案