一时兴起,觉得 Windows 上的 WinRar 和 7Z 都不是很好用,想自己设计一个 压缩软件来用。
那么首先进行技术选型。
Linux 因为众所周知的原因不需要这种屑东西,
所以我们的压缩软件主要在 Windows 上用,不用考虑跨平台。显然 Windows 软件
一定是需要 GUI 的。GUI 框架无外乎 Qt、Winform、WPF、Electron、awt、swing 和 JavaFX 等。
Qt 用 C++ 开发,也有 pyqt 这种 Python 的变种,但是总的来说太老套,设计
理念有些落后;Winform 和 WPF 都是微软家的,WPF 是基于 Winform 存在的一些问题开发
出来的,更先进一些,可以考虑;Electron 可以借用 Web 开发的技术(如 Vue、ElementUI),
UI 设计会更简单一些,Javascript 的库也比较多;awt、swing 和 JavaFX 都是 Java 系的,
其中 JavaFX 是 Java 最新的 GUI 框架,也比较 match 我最熟悉的 Java 技术栈。
然后寻找核心的支持压缩的包。WPF 可以在 dotnet core 上用 C# 开发,所以我们主要寻找
C# 的包,鉴于 dotnet core 上与 C++ 较好的互操作性,dll 也可考虑;除了 Github 外
还可以在 dotnet 包管理平台 nuget 上寻找包;
C# 的一些包可用性还是不错的。Electron 基于 NodeJS,需要 Javascript 或者 Typescript 的
包,可以在包管理平台 npm 查找;结果有些失望,找到的包的
功能都相对较弱,可用性不强;又鉴于我对 Javascript 开发的体验不佳,所以 Electron 方案
也 pass。Java 的生态还是很丰富的,可以在 Maven Central 寻找
包;最成熟的似乎是 Apache Commons Compress,但是它当前版本不支持分卷,不支持常用的 rar 格式,对压缩文件
内部条目的属性也支持偏少;另一个选择是 sevenzipjbind,它是压缩领域著名的 7Z SDK 的 Java Binding 版本,个人开发、文档还算全、关注度略低,
但是因为 7Z Engine 的加持,它的功能更加全面、速度更快。
最后,我们希望 GUI 尽可能美观,所以还需要 UI 框架或者皮肤。WPF 主要有 Avalonia、ModernWpf 和 MaterialDesignInXamlToolkit 三种选项。但是我后来发现 WPF 的界面编写需要用到一种
类似于 xml 的标记语言 xaml,而 JavaFX 可以改用 ScalaFX Wrapper 以享受用 Scala 原生 DSL 编写的快感,所以我最终确定用 JavaFX(ScalaFX) 技术栈。专用于 JavaFX 的 UI 框架
主要有 JFoenix 和 JMetro;前者风格是 Material Design,更成熟、关注度更高,但是
框架侵入性强;后者风格是 Win10 风,更轻量、使用简单,也还算美观;最终我决定选择后者。
综上,我们用 JavaFX,准确来说是 Scala 版本的 ScalaFX,作为 GUI 框架;搭配 UI 库 JMetro 使用;而用 sevenzipjbind 提供压缩、解压缩功能。
如果你喜欢我的文章,请我吃根冰棒吧 (o゜▽゜)o ☆

最后附上 GitHub:https://github.com/gonearewe