这个项目的目标一开始很简单:把一篇文章读进去,算出每个词出现了多少次。
第一版(2026-08-06)实现了这个核心目标:读 txt → 分词 → 统计词频 → 排序 → 导出报告。后面在用的过程中不断加东西:能读 Word/PDF 了、能统计多语言了、大文件不卡了、界面有主题有图标了。现在是一个能直接交付的桌面小工具。
- 读文件:txt / md / csv / log / json 直接读;docx / doc / pdf 用 POI 和 PDFBox 解析(大文件自动转后台读取不卡界面;超过 10 万字只显示前段,统计仍按全文)
- 分词按 Unicode 字母类走,英文、中文、日文、阿拉伯文、俄文都认
- 统计选项:大小写合并、包含数字、连字符/撇号处理、停用词过滤、最小词长
- 结果按频率、字母序、词长排序,升降序都行(设置里是中文下拉)
- 导出 CSV / JSON / TXT 报告
- 界面中英双语,亮/暗主题;启动有 SplashScreen 进度条
界面部分(FXML 布局、CSS 样式、JavaFX 控制器)主要通过 vibe coding(AI 辅助编程)完成:我先给出功能需求和界面设计,AI 生成大部分 UI 代码,再由我逐段审查、调试和修正。核心的统计逻辑(分词、计数、排序、文件解析)由我设计实现并验证,所有代码都经过人工检查和测试。
- v1(2026-08-06):核心功能完成——txt 读取、分词、词频统计、排序、导出。当时的实现是单文件管线(TextAnalyzer 里直接串起来)。
- v2+(后续迭代):
- 文档格式扩展:docx / doc / pdf
- 分词重构为独立模块(tokenizer / filter / counter / sorter 分包)
- 异步加载 + 大文本截断,解决"文件一大就卡死"
- 占比列改为自绘进度条(原生 ProgressBar 颜色设置不生效)
- 图标重制(黑底白"词")、启动动画同步换"词"、i18n 修复
- 排序方式下拉本地化(原来显示 FREQUENCY_DESC,现在中文 + 英文随界面语言)
- E 盘便携版(exFAT 上 exe 打不开,改用 javaw 直启)
- .doc 解析修复(jpackage 精简运行时缺 jdk.charsets 字符集模块,打包参数补齐)
详细的开发过程和踩坑记录见 docs/项目开发报告.md。
mvn test # 单元测试
mvn javafx:run # 本地运行
mvn package # 打包 jar打包成免安装目录(Windows,无控制台窗口):
jpackage --type app-image --name WordCounter \
--input target --main-jar wordcounter-1.0.0.jar \
--main-class com.example.wordcounter.Launcher \
--module-path <javafx-21.0.1-win.jar 所在目录> \
--add-modules javafx.controls,javafx.fxml,java.naming,java.sql,java.management,java.xml,java.desktop \
--dest dist产物在 dist/WordCounter/,双击 WordCounter.exe。注意整个目录(exe + app + runtime)要一起拷,只拷 exe 跑不起来。
src/main/java/com/example/wordcounter/:
io/:FileLoader(多格式读取)、ExportService(导出)、FileEncoder(编码检测)service/:tokenizer(分词)、filter(停用词/词长/数字过滤)、counter(计数,串行+并行两个实现)、sorter(排序)、report(导出格式)、TextAnalyzer(主管线)ui/:MainController、SettingsController(界面在 resources/fxml)model/:AnalysisConfig、WordFrequency 等数据类
dist/WordCounter/:当前构建产物WordCounter_旧版备份_0806/:v1 的打包产物(最早那一版)