java实现图片文件,自定义时间段分类转移

public class ReadPic {
    
    //输入起始时间,格式:yyyy-MM-dd HH:mm:ss
    private static String startTime = "2021-7-30 2:2:2";
    //输入结束时间,格式:yyyy-MM-dd HH:mm:ss
    private static String endTime = "2021-7-30 23:23:23";
    //输入来源文件路径
    private static String sourceUrl = "E:\\picture";
    //输入目标文件路径
    private static String targetUrl = "E:\\pictureSort";
    
    private final static String FS = System.getProperty("file.separator");

    public static void main(String[] args) throws ParseException {
        
        Date starDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(startTime);
        
        Date endDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(endTime);
        
        File file = new File(sourceUrl);
        
        File [] files = file.listFiles();
        
        try {
            
            long startMillisTime=System.currentTimeMillis();   //获取开始时间
            
            for (int i = 0; i < files.length; i++){
                
                File file1 = files[i];
                    
                    String picName = file1.getName(); //根据后缀判断

                    String hz = picName.substring(picName.lastIndexOf(".") + 1).toLowerCase();

                    //如果是图片则执行

                    if (hz.equals("jpg") || hz.equals("png") || hz.equals("jpeg")
                            || hz.equals("gif") ||  hz.equals("jfif") || hz.equals("webp")) {

                        File jpegFile = new File(sourceUrl + file.separator + picName);

                        Metadata metadata = ImageMetadataReader.readMetadata(jpegFile);

                        Iterator<Directory> it = metadata.getDirectories().iterator();
                        //遍历目录
                        while (it.hasNext()) {

                            Directory exif = it.next();

                            Iterator<Tag> tags = exif.getTags().iterator();

                            //遍历目录下标签
                            while (tags.hasNext()) {

                                Tag tag = (Tag) tags.next();

                                String tagName = tag.getTagName();

                                //取时间标签
                                if (tagName.equals("File Modified Date")) {

                                    String date = tag.getDescription();

                                    //因为时间格式为 “星期一 七月 26 10:37:58 +08:00 2021”  直接取时分秒  “10:37:58”
                                    //年
                                    String n = date.substring(date.lastIndexOf(" ") + 1);
                                    //月
                                    int y = date.substring(date.indexOf(" ") + 1, date.indexOf("月") + 1).equals("七月")
                                            ? 7
                                            : 8;
                                    //日
                                    String day[] = date.split(" ");
                                    String d = day[2];
                                    //时分秒
                                    String sfm = date.substring(10, 18);
                                    //拼接时间,后续比较
                                    String picTime = n + "-" + y + "-" + d + " " + sfm;

                                    Date picDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(picTime);
                                    if (picDate.before(endDate) && picDate.after(starDate)) {

                                        //如果没有文件夹,则创建
                                        File dirfile = new File(targetUrl);

                                        if (!dirfile.exists()) {

                                            dirfile.mkdirs();

                                        }
                                        //读取文件(字节流)
                                        InputStream in = new FileInputStream(sourceUrl + "/" + picName);
                                        //写入相应的文件
                                        OutputStream out = new FileOutputStream(targetUrl + file.separator + picName);
                                        //读取数据
                                        //一次性取多少字节
                                        byte[] bytes = new byte[20480];
                                        //接受读取的内容(r就代表的相关数据,只不过是数字的形式)
                                        int r = -1;
                                        //循环取出数据
                                        while ((r = in.read(bytes, 0, bytes.length)) != -1) {
                                            //写入相关文件
                                            out.write(bytes, 0, r);
                                        }

                                        //关闭流
                                        in.close();
                                        
                                        out.close();
                                        
                                        //删除文件来源
                                        File picfile = new File(sourceUrl + FS + picName);

                                        picfile.delete();
                                        
                                    }

                                }
                                
                            }
                            
                        }
                    
                }
           
            }
            
            long endMillisTime=System.currentTimeMillis(); //获取结束时间
            
            System.out.println("执行成功,用时"+(endMillisTime-startMillisTime)+"毫秒");
            
        } catch (Exception e) {
            e.printStackTrace();
        }
        
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值