java批量修改照片文件名为拍摄时间(Exif里获取)
手机里的照片一年整理一次。拍摄时间在Exif中获取若获取失败则使用创建时间。package auto; import com.drew.imaging.ImageMetadataReader; import com.drew.imaging.ImageProcessingException; import com.drew.metadata.Metadata; import com.drew.metadata.exif.ExifSubIFDDirectory; import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.attribute.BasicFileAttributes; import java.nio.file.attribute.FileTime; import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimeZone; /** * author rll * description: 批量修改照片(jpg)时间 * date 2026/8/7 */ public class PicRename { public static void main(String[] args) { //设置为GMT8小时时间对不上特意改为GMT TimeZone.setDefault(TimeZone.getTimeZone(GMT)); //TODO 修改为你要处理的文件夹路径 String folderPath F:\\test; File folder new File(folderPath); if (!folder.exists() || !folder.isDirectory()) { System.out.println(文件夹不存在或不是一个目录: folderPath); return; } File[] files folder.listFiles((dir, name) - name.toLowerCase().endsWith(.jpg)); if (files null || files.length 0) { System.out.println(文件夹内没有 .jpg 文件); return; } SimpleDateFormat sdf new SimpleDateFormat(yyyy_MM_dd HH_mm_ss); // EXIF 时间通常为本地时间无需时区转换 sdf.setTimeZone(TimeZone.getDefault()); for (File file : files) { try { Date shootingTime getShootingTime(file); String newName sdf.format(shootingTime) .jpg; File newFile new File(folder, newName); // 处理重名若文件已存在且不是同一文件添加序号 if (newFile.exists() !file.getCanonicalPath().equals(newFile.getCanonicalPath())) { newFile makeUniqueFile(folder, sdf.format(shootingTime), .jpg); } if (file.renameTo(newFile)) { System.out.println(重命名成功: file.getName() - newFile.getName()); } else { System.out.println(重命名失败: file.getName()); } } catch (Exception e) { System.err.println(处理文件失败: file.getName() , 原因: e.getMessage()); } } } /** * 优先从 EXIF 获取拍摄时间若获取失败则使用文件修改时间 */ private static Date getShootingTime(File file) throws IOException { try { Metadata metadata ImageMetadataReader.readMetadata(file); ExifSubIFDDirectory exifDir metadata.getFirstDirectoryOfType(ExifSubIFDDirectory.class); if (exifDir ! null) { Date date exifDir.getDateOriginal(); System.out.println(拍摄时间exifDir); if (date ! null) { return date; } } } catch (ImageProcessingException e) { // 无法解析 EXIF使用文件时间 } // Fallback: 使用文件最后修改时间 Path path Paths.get(file.getAbsolutePath()); BasicFileAttributes attrs Files.readAttributes(path, BasicFileAttributes.class); FileTime fileTime attrs.lastModifiedTime(); return new Date(fileTime.toMillis()); } /** * 生成不重名的文件命名格式为 baseName_序号.jpg */ private static File makeUniqueFile(File directory, String baseName, String extension) { int count 1; File candidate; do { candidate new File(directory, baseName _ count extension); count; } while (candidate.exists()); return candidate; } }

相关新闻

SUNO与Codex智能体结合:从零搭建AI音乐生成工作流实战指南

SUNO与Codex智能体结合:从零搭建AI音乐生成工作流实战指南

这类工具最值得先看的不是功能列表,而是能不能在普通环境里稳定跑起来,以及从零开始到做出第一个可用的东西,中间到底要踩多少坑。SUNO V5.5 和 Codex 智能体结合做音乐,听起来很酷,但新手最容易卡在环境配置、提示词理…

2026/8/9 10:32:46 阅读更多 →
大模型提示词工程实战:从CoT到ToT/GoT/PoT,小白也能轻松上手

大模型提示词工程实战:从CoT到ToT/GoT/PoT,小白也能轻松上手

对于刚入门大模型的小白,或是想精进提示词(Prompt)技巧、提升大模型应用效率的程序员而言,一套高效的提示词工程框架,就如同给大模型装上了“精准导航系统”——不仅能让复杂逻辑问题快速破局,更能让模型的…

2026/8/9 10:32:46 阅读更多 →
Reloaded-II终极指南:跨平台游戏模组加载器完全解析

Reloaded-II终极指南:跨平台游戏模组加载器完全解析

Reloaded-II终极指南:跨平台游戏模组加载器完全解析 【免费下载链接】Reloaded-II Universal .NET Core Powered Modding Framework for any Native Game X86, X64. 项目地址: https://gitcode.com/gh_mirrors/re/Reloaded-II 还在为游戏模组安装的复杂流程而…

2026/8/9 10:32:46 阅读更多 →

最新新闻

Agent 上线就崩?LangGraph 把 Demo 变成生产系统的最后一公里

Agent 上线就崩?LangGraph 把 Demo 变成生产系统的最后一公里

《LangGraph并不难,难的是知道什么时候不该用》看起来是个大话题,但真落到项目里,常常就是几个具体选择。下面我尽量按实际开发时会遇到的问题来讲。摘要前阵子帮一个团队做 Code Review,他们的 Agent 在本地跑得好好的&#xff0…

2026/8/9 15:19:17 阅读更多 →
API服务化,用FastAPI把Agent封装成RESTful接口

API服务化,用FastAPI把Agent封装成RESTful接口

API服务化,用FastAPI把Agent封装成RESTful接口 前面几十篇做的Agent都是在本地脚本里跑,自己用没问题。但真要给别人用,或者接到产品系统里,你总不能让别人也开个终端跑Python。把Agent封装成一个HTTP接口,别人发个请求…

2026/8/9 15:19:17 阅读更多 →
ArcGIS Pro圆弧线半径标注加载项:原理、安装与实战应用

ArcGIS Pro圆弧线半径标注加载项:原理、安装与实战应用

如果你在 ArcGIS Pro 中处理过道路设计、管线规划或任何涉及圆弧要素的 GIS 数据,一定遇到过这个痛点:如何快速、准确、批量地为地图上的圆弧线标注半径?ArcGIS Pro 自带的标注功能很强大,但对于圆弧这类特殊几何,其“…

2026/8/9 15:19:17 阅读更多 →
太阳能智慧井盖:城市地下管网智能化监测解决方案

太阳能智慧井盖:城市地下管网智能化监测解决方案

一、产品概述太阳能井盖是一种集成了环境感知、数据采集、无线通信与远程监控功能的设备,旨在实现对各类地下管网窨井内部设备状态与井盖自身状态的实时监测与预警。该设备是构建城市管网管理系统的重要组成部分,能够有效应对传统井下监测面临的诸多挑战…

2026/8/9 15:19:17 阅读更多 →
WhisperX:离线语音识别的革命性突破,70倍速精准转文字

WhisperX:离线语音识别的革命性突破,70倍速精准转文字

WhisperX:离线语音识别的革命性突破,70倍速精准转文字 【免费下载链接】whisperX WhisperX: Automatic Speech Recognition with Word-level Timestamps (& Diarization) 项目地址: https://gitcode.com/gh_mirrors/wh/whisperX 在数字化办公…

2026/8/9 15:19:16 阅读更多 →
【信息科学与工程学】计算机科学与自动化——第二十四篇 编译器 101 面向编译器开发设计01

【信息科学与工程学】计算机科学与自动化——第二十四篇 编译器 101 面向编译器开发设计01

编号 类型 领域 编译器产品 问题 问题的数学分析及编译方法及配置策略 算法/算子设计及算法/算子数学分析及数学表达式及方程式/多项式/矩阵/集合/离散数学/队列/数组/图/表/其他的表达式及参数的数值设计及数值范围设计 硬件资源需求 关联知识 1 性能优化 循环优化…

2026/8/9 15:18:16 阅读更多 →

日新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/9 0:01:47 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/9 0:01:47 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/9 0:03:48 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/9 0:01:47 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/9 0:01:47 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/9 0:03:48 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/8 17:02:44 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/9 0:45:04 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/8 17:02:44 阅读更多 →