一个用于在多个移动硬盘上快速查找和管理视频文件的桌面应用程序。
- 视频文件索引: 快速扫描和索引多个移动硬盘上的视频文件
- 目录级扫描: 支持右键菜单快速扫描指定目录,显示详细统计信息(扫描文件数、新增数、删除数、耗时)
- 跨磁盘搜索: 支持在多个磁盘间统一搜索视频,支持实时搜索(可选)
- SQLite 数据库: 每个磁盘拥有独立的索引文件,基于相对路径实现磁盘索引的可移植性
- 图形化界面: 提供树形视图和表格视图,方便浏览和管理视频文件
- 主题切换: 支持浅色/深色/跟随系统三种主题,配置持久化保存
- 快捷键支持:
Ctrl + F: 聚焦搜索框Alt + W: 清空搜索内容
- 实时搜索: 可选的实时搜索功能,输入时自动触发搜索(700ms 延迟)
- 智能文件树: 刷新后自动恢复选中状态,提升用户体验
- 打开所在文件夹: 右键菜单支持在资源管理器中打开并选中文件
- SMART 信息检测: 可选功能,支持检测磁盘健康状态
- 中文支持: 支持中文文件名和简体中文界面,自动进行简繁体转换
- 索引验证和清理: 自动检测并清理无效的索引记录
- 右键菜单选择"验证并清理索引"
- 逐条验证文件路径,删除不存在的记录
- 显示详细统计信息(总记录数、删除数、耗时)
- 可取消的索引操作: 索引过程中可以随时取消
- 进度窗口提供"取消"按钮
- 安全终止索引操作,避免数据损坏
- 单实例机制: 自动检测并防止重复运行
- 使用 NIO FileLock 实现进程锁
- 已运行时自动激活已存在的窗口
- 状态栏显示: 实时显示文件统计信息
- 浏览模式:显示文件总数("共 100 个项目")
- 搜索模式:显示搜索结果和已删除文件数
- 虚拟返回上级行: 表格顶部提供"返回上一级"快捷入口
- 双击虚拟行快速返回父目录
- 特殊图标和样式标识
- Java 17 或更高版本
- Windows 操作系统
- 64 位 JDK/JRE
-
创建索引标记文件
将
.disk.needindex文件复制到需要索引的分区根目录,或者在该目录下创建一个名为.disk.needindex的空文件。 -
运行程序
java -jar video-manager-0.0.1-SNAPSHOT-shaded.jar
或直接运行编译后的可执行文件:
video-manager.exe
-
程序将自动
- 检测带有
.disk.needindex标记的磁盘 - 扫描并索引视频文件
- 在界面上显示文件树和搜索功能
- 检测带有
- Ctrl + F: 快速聚焦到搜索框
- Alt + W: 清空搜索内容
- 勾选搜索框旁的"实时搜索"复选框
- 输入时自动触发搜索(700ms 延迟,避免频繁查询)
- 取消勾选则需要按回车键或点击搜索按钮执行搜索
在文件列表中右键点击任意文件或目录,选择"扫描此目录"功能:
- 智能识别:自动识别选中项是文件还是目录,目录则扫描自身,文件则扫描其父目录
- 进度显示:弹出进度窗口,实时显示扫描进度
- 详细统计:扫描完成后显示:
- 扫描文件总数
- 新增文件数
- 删除旧记录数
- 扫描耗时
- 增量更新:先删除该目录的旧索引记录,再插入新的扫描结果
如需启用磁盘健康状态检测:
- 从 smartmontools 官网 下载 smartmontools
- 将
smartctl可执行文件复制到 Windows 的system32目录下 - 对于非移动硬盘,SMART 检测可能需要管理员权限,可以以管理员身份运行 video-manager
程序支持三种主题模式,可通过菜单栏切换:
- 浅色主题: 适合白天使用,色彩明亮
- 深色主题: 适合夜间使用,保护视力
- 跟随系统: 自动根据系统主题切换
主题配置保存在 ~/.video-manager/theme.properties,下次启动时自动应用上次选择的主题。
随着时间推移,磁盘上的视频文件可能被移动或删除,导致索引中存在无效记录。使用索引验证和清理功能可以优化索引:
-
触发方式
- 在文件树中右键点击磁盘节点
- 选择"验证并清理索引"菜单项
-
执行过程
- 程序会逐条验证索引记录对应的文件是否存在
- 自动收集无效路径(文件已被移动或删除)
- 批量删除无效记录并提交事务
- 显示详细统计信息:
- 索引总记录数
- 删除的无效记录数
- 验证和清理耗时
-
注意事项
- 大型磁盘(数万条记录)验证可能需要数分钟
- 建议定期执行(如每月一次)
- 验证过程中可以取消操作
- 双击表格中的虚拟"返回上一级"行快速返回父目录
- 双击文件直接打开(使用系统默认程序)
- 双击目录在文件树中展开并定位
- 使用实时搜索功能节省时间(勾选"实时搜索"复选框)
- 搜索时自动进行简繁体转换,无需担心输入法
- 搜索结果显示已删除的文件数量(红色标识)
- 扫描目录时显示详细统计,了解索引更新情况
- 索引验证时删除无效记录,优化索引大小
- 刷新文件树时自动恢复选中状态,无需手动定位
Q: 为什么有些视频文件搜索不到? A: 请确保:
- 文件所在的磁盘已创建索引(创建
.disk.needindex标记文件) - 文件格式在支持列表中(目前支持 15 种常见视频格式)
- 文件名搜索时自动进行简繁体转换,无需手动切换
Q: 程序启动缓慢怎么办? A: 可能的原因和解决方法:
- 磁盘数量过多:移除不需要的磁盘标记文件(
.disk.needindex) - 索引文件过大:执行"验证并清理索引"删除无效记录
- 首次启动主题加载:属于正常现象,后续启动会快很多
Q: 如何取消正在进行的索引操作? A: 在索引进度窗口点击"取消"按钮即可。程序会安全终止索引操作,避免数据损坏。
Q: 可以同时运行多个程序实例吗? A: 不可以。程序内置单实例锁机制,尝试启动第二个实例时会自动激活已存在的窗口。
程序内置单实例锁机制,确保同一时间只有一个实例运行:
-
自动检测
- 启动时自动检测是否已有实例运行
- 如果已运行,自动激活现有窗口并退出新启动的实例
-
实现原理
- 使用 NIO FileLock 实现进程锁
- 锁文件位于:
~/.video-manager/app.lock - 程序正常退出时自动释放锁
-
异常处理
- 如果程序异常崩溃,锁文件可能残留
- 再次启动时检测到残留锁会提示用户
- 可以手动删除锁文件:
%USERPROFILE%\.video-manager\app.lock
项目使用 Maven 进行构建管理,执行以下命令:
# 清理并编译
mvn clean compile
# 运行(开发模式)
mvn exec:java -Dexec.mainClass="com.github.scm1219.video.VideoManagerApp"
# 打包(生成 JAR 和 EXE)
mvn clean package编译成功后,将在 target 目录下生成:
video-manager-1.1.0-RELEASE-shaded.jar- 包含所有依赖的可执行 JAR 文件video-manager.exe- Windows 可执行文件(带图标)video-manager.jar- 符号链接,指向 shaded JAR
- JDK/JRE: Java 17 或更高版本(64 位)
- 操作系统: Windows 7 或更高版本
- 内存: 建议 512MB 以上可用内存
- 磁盘空间: 根据索引文件大小而定(通常每个磁盘 1-50MB)
程序运行时会在用户目录下创建配置文件:
- 主题配置:
~/.video-manager/theme.properties - 锁文件:
~/.video-manager/app.lock - 索引标记:
<磁盘根目录>/.disk.needindex - 索引文件:
<磁盘根目录>/.disk.sqlite
- Java: 17+
- 构建工具: Maven 3.6+
- 数据库: SQLite (sqlite-jdbc 3.51.1.0)
- 每个磁盘独立的索引文件(
.disk.sqlite) - 支持事务处理和批量操作
- 每个磁盘独立的索引文件(
- GUI 框架:
- Java Swing(核心组件)
- FlatLaf 3.5.4(现代化主题系统)
- Flat Light(浅色主题)
- Flat Dark(深色主题)
- Flat System(跟随系统)
- 中文转换: OpenCC4j 1.14.0(简繁体转换)
- 日志: SLF4J + Logback
- 工具库:
- Apache Commons Lang3(通用工具)
- Apache Commons IO(文件操作)
- Lombok(减少样板代码)
- 打包部署:
- Maven Shade(合并依赖)
- Launch4j(生成 Windows .exe)
src/
├── main/
│ ├── java/com/github/scm1219/
│ │ ├── utils/ # 工具类(文件、磁盘、日期等)
│ │ └── video/
│ │ ├── domain/ # 领域模型(Disk、Index、DiskManager)
│ │ ├── gui/ # 图形界面
│ │ │ ├── tree/ # 文件树组件及右键菜单
│ │ │ └── table/ # 文件表格组件及渲染器
│ │ ├── VideoManagerApp.java # 主程序入口
│ │ └── AppLock.java # 单实例锁机制
│ └── resources/ # 资源文件(图标、主题配置)
└── test/ # 测试代码
- ✨ 新增索引验证和清理功能
- 右键菜单支持"验证并清理索引"
- 逐条验证文件路径有效性,自动删除无效记录
- 显示详细统计信息(总记录数、删除数、耗时)
- 🔒 新增单实例锁机制
- 使用 NIO FileLock 防止重复运行
- 自动激活已存在的窗口
⚠️ 完善索引取消功能- 索引过程中可随时取消操作
- 进度窗口提供"取消"按钮
- 安全终止索引,避免数据损坏
- 🐛 修复主题切换时字体颜色不变化的问题
- 📝 优化帮助文档格式和内容
- ✨ 新增实时搜索功能
- 添加"实时搜索"复选框,启用后输入时自动触发搜索
- 700ms 延迟机制,避免频繁查询影响性能
- ⌨️ UI 优化,添加快捷键支持
Ctrl + F: 快速聚焦搜索框Alt + W: 清空搜索内容
- 🐛 处理打包警告,优化构建配置
- 🎨 新增主题功能
- 支持浅色/深色/跟随系统三种主题
- 主题配置持久化保存(
~/.video-manager/theme.properties) - 菜单栏切换主题,下次启动自动应用
- 🔧 优化文件树用户交互体验
- 刷新后自动恢复选中状态
- 优化树节点渲染器,使用 JPanel + JLabel 替代 HTML 标签
- 提取颜色常量,提高性能
- ✨ 新增"打开所在文件夹"功能
- 右键菜单支持在资源管理器中打开并选中文件
- ✨ 新增"扫描此目录"功能
- 支持右键菜单快速扫描指定目录
- 显示详细统计信息(扫描文件数、新增数、删除数、耗时)
- 智能识别文件/目录,自动确定扫描范围
- 增量更新索引,先删除旧记录再插入新记录
- 🐛 修复文件大小排序错误的问题
- 🌳 修改左侧树状显示逻辑,优化节点展开行为
- ⚡ 性能优化:添加图标缓存和异步加载
Copyright 2022 springtour.cn
本项目采用开源许可证,具体许可条款请查看 LICENSE 文件。
感谢以下开源项目:
- FlatLaf - 现代化的 Swing 主题系统
- SQLite - 轻量级嵌入式数据库
- OpenCC4j - 中文简繁体转换
- Apache Commons - Java 工具库集合
- GitHub: https://github.com/scm1219/video-manager
- Issue: https://github.com/scm1219/video-manager/issues
欢迎提交 Issue 和 Pull Request!