merge: 合并 main(新增文件下载模块)并适配 Java 21

- 版本统一为 1.9-SNAPSHOT-Java21(pom / version 常量 / README / INFO)
- 合并 main 新增的文件下载模块(单线程 + HTTP Range 多线程下载)与门面接口
- 修复多线程下载:块失败异常不再被静默吞掉(解包 ExecutionException 抛出 RuntimeException)、
  文件小于线程数时收敛有效线程数、线程池 finally 关闭
- 测试适配:原 downloadfile 测试不匹配 surefire 规则且依赖内网,重写为本地 HttpServer
  驱动的 DownloadFileTest(单线程/多线程/小文件边界/不支持断点续传抛错)
- SpotBugs 排除规则补充下载模块的遗留命名;README 测试说明同步(58 个用例)
- 验证:JDK 21 下 mvn clean verify 通过(58/58 测试 + checkstyle + SpotBugs 0 问题)
This commit is contained in:
database-mysql committed 2026-11-02 22:29:42 +08:00
commit 5388ecaa7e
8 files changed
+492 -27

No files matched your search

+46 -11
View File
@@ -1,6 +1,6 @@
# GNU Java Utils Library
一个轻量级 Java 工具库,提供压缩/解压、终端彩色输出、文件创建与管理、文件加密/解密、随机数生成、硬件标识等功能。
一个轻量级 Java 工具库,提供压缩/解压、终端彩色输出、文件创建与管理、文件加密/解密、文件下载(单线程/多线程)、随机数生成、硬件标识等功能。
> 注:此项目/仓库已同步到 Github:[https://github.com/databasemysql233-debug/gnu_java_utils_library.git](https://github.com/databasemysql233-debug/gnu_java_utils_library.git)
> 原项目/仓库链接:[https://git.opensource-studio.info/database-mysql/gnu_java_utils_library.git](https://git.opensource-studio.info/database-mysql/gnu_java_utils_library.git)
@@ -23,7 +23,9 @@ src/main/java/top/gtb520/java/gnu/java/utils/library/
│ └── compress.java # 压缩/解压工具类
├── file/
│ ├── CreateFile.java # 文件创建/保存工具类
│ └── EncryptionAndDecryption.java # 文件加密/解密工具类
│ ├── EncryptionAndDecryption.java # 文件加密/解密工具类
│ └── download/
│ └── file.java # 文件下载工具类(单线程/多线程)
├── print/
│ ├── echo.java # 终端彩色输出工具类
│ └── ColorNameEnum.java # 颜色名称枚举
@@ -273,7 +275,40 @@ File keyFile = keyDir.resolve("data.txt.key").toFile();
File decrypted = EncryptionAndDecryption.DecryptionFile(file, EncryptionType.AES, keyFile);
```
### 5. 随机生成器 (`random`)
### 5. 文件下载 (`file/download`)
支持单线程和多线程文件下载,多线程模式通过 HTTP `Range` 请求分块并行下载,自动创建父目录。
| 方法 | 说明 | 参数 |
|-------------------------------------------------------|---------------------------------------|-------------------------------------------------------------|
| `file.DownloadFile(URL, destFilePanth)` | 单线程下载文件 | `URL` 文件地址,`destFilePanth` 保存路径 |
| `file.DownloadFile(URL, destFilePanth, threadNum)` | 多线程下载文件(支持断点续传) | `URL` 文件地址,`destFilePanth` 保存路径,`threadNum` 线程数枚举 |
**线程数枚举 (`ThreadNum`):**
| 枚举值 | 线程数 |
|-------------------|------|
| `THREAD_NUM_II` | 2 |
| `THREAD_NUM_IV` | 4 |
| `THREAD_NUM_VI` | 6 |
| `THREAD_NUM_VIII` | 8 |
| `THREAD_NUM_X` | 10 |
> 多线程下载要求服务器支持 `Accept-Ranges: bytes`(HTTP 206 响应),否则将抛出 `RuntimeException`。
> 入参为 `null` 时抛出 `IllegalArgumentException`;HTTP 请求失败时抛出 `RuntimeException`。
```java
import top.gtb520.java.gnu.java.utils.library.utils.file.download.file;
import top.gtb520.java.gnu.java.utils.library.utils.file.download.file.ThreadNum;
// 单线程下载
file.DownloadFile("https://example.com/file.zip", "/path/to/save/file.zip");
// 多线程下载(4 线程)
file.DownloadFile("https://example.com/file.zip", "/path/to/save/file.zip", ThreadNum.THREAD_NUM_IV);
```
### 6. 随机生成器 (`random`)
| 方法 | 说明 | 参数 |
|---------------------------------------------|--------------|------------------------------|
@@ -289,7 +324,7 @@ String str = defaults.randomString(16); // 生成 16 位随机字符串(
> `random(start, end)` 结果包含两端;`randomString(length)` 的长度不能为负数,否则抛出 `IllegalArgumentException`。
### 6. 硬件标识生成器 (`hwid`)
### 7. 硬件标识生成器 (`hwid`)
组合 CPU、主板、MAC 地址、硬盘序列号等信息,通过 SHA-256 生成唯一的硬件标识符(HWID)。支持 Windows、macOS、Linux 及 Android 平台。
@@ -307,7 +342,7 @@ System.out.println("HWID: " + hwid);
> 单项硬件信息获取失败时自动跳过该组件(如无序列号的硬件);全部失败时返回 `"UNKNOWN_HWID"`。
> MAC 地址优先取非回环、非虚拟网卡,避免虚拟网卡导致 HWID 漂移。
### 7. 版本信息 (`version`)
### 8. 版本信息 (`version`)
提供项目版本信息及编译时 Java/OpenJDK 版本常量。
@@ -338,7 +373,7 @@ main.version.getOpenJDKRuntimeEnvironment(); // OpenJDK 运行时环境
main.version.getOpenJDK64BitServerVM(); // OpenJDK 64-Bit Server VM
```
### 8. 运行时信息 (`runtime`)
### 9. 运行时信息 (`runtime`)
获取当前 Java 运行时环境信息,包括 JAR 路径、JVM 版本、位数等。
@@ -406,17 +441,17 @@ mvn package
## 测试
项目使用 JUnit 5 编写测试(共 53 个用例),运行:
项目使用 JUnit 5 编写测试(共 58 个用例),运行:
```bash
mvn test
```
测试覆盖压缩/解压往返、Zip-Slip 恶意压缩包防护、AES/DES/RSA 加解密往返(含 8MB 大文件流式测试与错误密钥不损坏密文)、随机数边界(含 `Integer.MAX_VALUE` 上界)、彩色输出格式叠加与注入防护、临时目录创建与 HWID 稳定性。
测试覆盖压缩/解压往返、Zip-Slip 恶意压缩包防护、AES/DES/RSA 加解密往返(含 8MB 大文件流式测试与错误密钥不损坏密文)、随机数边界(含 `Integer.MAX_VALUE` 上界)、彩色输出格式叠加与注入防护、临时目录创建与 HWID 稳定性,以及文件下载(本地 HTTP 服务器驱动:单线程、多线程、小文件边界、服务器不支持断点续传时抛错)。
## 使用
编译成功后,将 `target/gnu_java_utils_library-1.8-SNAPSHOT-Java21.jar` 放入项目依赖中,或在 Releases 中下载最新版 JAR 包。
编译成功后,将 `target/gnu_java_utils_library-1.9-SNAPSHOT-Java21.jar` 放入项目依赖中,或在 Releases 中下载最新版 JAR 包。
**pom.xml 引入本地依赖:**
@@ -425,9 +460,9 @@ mvn test
<dependency>
<groupId>top.gtb520.java.gnu</groupId>
<artifactId>gnu_java_utils_library</artifactId>
<version>1.8-SNAPSHOT-Java21</version>
<version>1.9-SNAPSHOT-Java21</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/gnu_java_utils_library-1.8-SNAPSHOT-Java21.jar</systemPath>
<systemPath>${project.basedir}/lib/gnu_java_utils_library-1.9-SNAPSHOT-Java21.jar</systemPath>
</dependency>
</dependencies>
```