From c38b8857d5e1acf14e9613bc183f0030834e2e21 Mon Sep 17 00:00:00 2001 From: database-mysql Date: Wed, 12 Aug 2026 03:00:02 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E/=E6=9C=AA=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=20=E6=96=87=E4=BB=B6=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- .../java/gnu/java/utils/library/main.java | 21 +++++ .../utils/library/utils/file/CreateFile.java | 89 +++++++++++++++++++ .../utils/library/utils/file/Encryption.java | 15 ++++ .../java/gnu/java/utils/library/version.java | 2 +- 5 files changed, 127 insertions(+), 2 deletions(-) create mode 100644 src/main/java/top/gtb520/java/gnu/java/utils/library/utils/file/CreateFile.java create mode 100644 src/main/java/top/gtb520/java/gnu/java/utils/library/utils/file/Encryption.java diff --git a/pom.xml b/pom.xml index 0fc3426..ad3681b 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ top.gtb520.java.gnu gnu_java_utils_library - 1.3-SNAPSHOT + 1.4-SNAPSHOT 25 diff --git a/src/main/java/top/gtb520/java/gnu/java/utils/library/main.java b/src/main/java/top/gtb520/java/gnu/java/utils/library/main.java index 565ffe9..df2cee3 100644 --- a/src/main/java/top/gtb520/java/gnu/java/utils/library/main.java +++ b/src/main/java/top/gtb520/java/gnu/java/utils/library/main.java @@ -2,6 +2,12 @@ package top.gtb520.java.gnu.java.utils.library; import top.gtb520.java.gnu.java.utils.library.utils.print.ColorNameEnum; +import java.io.File; +import java.nio.file.Path; + +import static top.gtb520.java.gnu.java.utils.library.utils.file.CreateFile.BinFileType; + + public interface main { // 压缩包操作相关接口与方法 interface compress { @@ -127,4 +133,19 @@ public interface main { } } } + + // 文件操作接口与方法 + interface file { + interface CreateFile { + // 创建文件,创建空白文件,异步IO + static File NewFile(String FileName, boolean isBin, BinFileType binFileType) { + return top.gtb520.java.gnu.java.utils.library.utils.file.CreateFile.NewFile(FileName, isBin, binFileType); + } + + // 以字节流方式保存文件,异步IO + static boolean StreamSaveFile(File file, Path TargePath, String FileName) { + return top.gtb520.java.gnu.java.utils.library.utils.file.CreateFile.StreamSaveFile(file, TargePath, FileName); + } + } + } } diff --git a/src/main/java/top/gtb520/java/gnu/java/utils/library/utils/file/CreateFile.java b/src/main/java/top/gtb520/java/gnu/java/utils/library/utils/file/CreateFile.java new file mode 100644 index 0000000..790c192 --- /dev/null +++ b/src/main/java/top/gtb520/java/gnu/java/utils/library/utils/file/CreateFile.java @@ -0,0 +1,89 @@ +package top.gtb520.java.gnu.java.utils.library.utils.file; + +import java.io.File; +import java.io.IOException; +import java.io.OutputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardOpenOption; +import java.util.concurrent.CompletableFuture; + +// 创建文件 +public class CreateFile { + /*** + * 创建文件,创建空白文件 + * isBin为True时创建一个空白的二进制文件,否则创建一个空白的普通文件 + * 异步IO操作 + * + * @param FileName 文件名 + * @param isBin 是否二进制文件 + * @param binFileType 二进制文件类型,如果是普通文件则不需要设置次值,将其设置为null即可, + * 参考isBin参数,isBin参数为False则此参数设置为null + * + * @return 文件 + */ + public static File NewFile(String FileName, boolean isBin, BinFileType binFileType) { + File TargetFile = null; + byte[] BufferByte = new byte[1024]; + + try { + TargetFile = new File(FileName); + if (TargetFile.createNewFile()) { + if (isBin && binFileType != null) { + // 根据二进制文件类型写入文件头标识 + byte[] header = switch (binFileType) { + case ELF -> new byte[]{0x7F, 'E', 'L', 'F'}; + case PE -> new byte[]{'M', 'Z'}; + }; + try (OutputStream os = Files.newOutputStream(TargetFile.toPath(), + StandardOpenOption.WRITE, StandardOpenOption.TRUNCATE_EXISTING)) { + os.write(header); + os.flush(); + } + } + } + } catch (IOException e) { + TargetFile = null; + } + + return TargetFile; + } + + /*** + * 以字节流方式保存文件 + * 异步IO操作 + * + * @param file 文件 + * @param TargePath 目标路径 + * @param FileName 文件名 + * + * @return 是否保存成功,True为保存成功,False为保存失败 + */ + public static boolean StreamSaveFile(File file, Path TargePath, String FileName) { + try { + Path targetFile = TargePath.resolve(FileName); + return CompletableFuture.supplyAsync(() -> { + try (OutputStream os = Files.newOutputStream(targetFile, + StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING)) { + byte[] buffer = new byte[1024]; + int bytesRead; + try (var is = Files.newInputStream(file.toPath())) { + while ((bytesRead = is.read(buffer)) != -1) { + os.write(buffer, 0, bytesRead); + } + } + os.flush(); + return true; + } catch (IOException e) { + return false; + } + }).get(); + } catch (Exception e) { + return false; + } + } + + public enum BinFileType { + ELF, PE; + } +} diff --git a/src/main/java/top/gtb520/java/gnu/java/utils/library/utils/file/Encryption.java b/src/main/java/top/gtb520/java/gnu/java/utils/library/utils/file/Encryption.java new file mode 100644 index 0000000..202bf9a --- /dev/null +++ b/src/main/java/top/gtb520/java/gnu/java/utils/library/utils/file/Encryption.java @@ -0,0 +1,15 @@ +package top.gtb520.java.gnu.java.utils.library.utils.file; + +import java.io.File; + +public class Encryption { + /*** + * 文件加密 + * + * @param file 文件 + * @param type 加密类型 + */ + public static void EncryptionFile(File file, String type) { + + } +} diff --git a/src/main/java/top/gtb520/java/gnu/java/utils/library/version.java b/src/main/java/top/gtb520/java/gnu/java/utils/library/version.java index 1bdfef8..2e79b66 100644 --- a/src/main/java/top/gtb520/java/gnu/java/utils/library/version.java +++ b/src/main/java/top/gtb520/java/gnu/java/utils/library/version.java @@ -2,7 +2,7 @@ package top.gtb520.java.gnu.java.utils.library; public class version { // 项目的版本信息,不代表实时运行环境 - public static final String VERSION = "1.3"; + public static final String VERSION = "1.4"; public static final String JAVA_VERSION = "25"; public static final String OpenJDK_VERSION = "25.0.0.0.1"; public static final String OpenJDK_Runtime_Environment = "25.0.0.0.1+36-GA";