OracleLoadstar/SCE-Universe_Java_Edition
开发者指南库引用与编译

引用外部库

概述

OracleLoadstar/SCE-Universe_Java_Edition 项目在“引用外部库”方面采取了一种不同寻常的方法。它没有采用现代Java项目常用的依赖管理工具,如Maven或Gradle,而是主要依赖于Java标准库(JDK自带的类库)以及项目内部自定义实现的工具类。这意味着项目中没有显式声明的第三方库依赖,所有的功能都基于JDK或项目自身的代码。

这种方法简化了构建过程,仅通过 javacjar 命令即可完成编译和打包,避免了管理复杂的第三方依赖。然而,这也意味着项目需要自行实现一些常见的功能(例如JSON解析),或者仅限于使用Java标准库提供的功能。

架构

主组件交互

此架构图展示了 SCE-Universe_Java_Edition 应用程序如何与Java标准库以及项目内部的工具模块进行交互。核心应用程序通过使用Java标准库提供的基础功能(如Swing GUI、文件I/O等)和项目自定义工具(如JSON处理)来提供其功能。

加载图表中...

说明:

  • Application (cn.oraclestar.sce.App.App): 应用程序的入口点,负责协调各项功能。
  • Internal Tools (内部工具模块): 包含项目自定义实现的功能,例如 gui 类用于文件选择器,JsonJsonArray 用于自定义JSON数据的序列化与反序列化。这些工具类对应用程序的其他部分提供了“库”级别的服务。
  • Java Standard Library (Java标准库): 应用程序和内部工具都广泛使用了Java开发工具包(JDK)自带的类库,如 javax.swing 用于构建用户界面,java.io 处理文件输入输出,java.util 提供数据结构和算法。

自定义JSON工具类结构

项目内部实现了 JsonJsonArray 类来处理JSON数据的序列化和反序列化,这替代了通常会引入的第三方JSON库(如Jackson, Gson)。

加载图表中...

说明:

  • Json 类提供了基础的 Map<String, String> 到 JSON 字符串以及 JSON 字符串到 Map<String, String> 的转换功能。
  • JsonArray 类在此基础上扩展,处理 List<Map<String, String>> 与 JSON 数组字符串之间的转换,并提供数组的增删改查操作。

核心流程

该项目的核心流程不涉及复杂的外部依赖管理系统,其构建和运行流程非常直接。

加载图表中...

说明: 这个流程图展示了从开发者执行构建脚本到应用程序在JVM中运行的整个过程。它强调了没有外部依赖管理工具的参与,编译器和打包工具直接处理项目内部的源文件。

使用示例

使用 javax.swing.JFileChooser 进行文件选择

项目通过 cn.oraclestar.sce.system.tools.gui 类封装了 JFileChooser,用于在GUI中进行文件或目录选择。这是Java标准库在GUI交互中的典型应用。

java
1package cn.oraclestar.sce.system.tools; 2 3import javax.swing.JFileChooser; 4import javax.swing.filechooser.FileSystemView; 5 6public class gui { 7 public static String selectorD(){ 8 JFileChooser filechooser = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory()); 9 filechooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 10 filechooser.showOpenDialog(null); 11 // 如果用户选择了文件,返回其绝对路径;否则返回null或空字符串,具体取决于实现 12 if (filechooser.getSelectedFile() != null) { 13 return filechooser.getSelectedFile().getAbsolutePath(); 14 } 15 return null; // 或者抛出异常,根据需求而定 16 } 17 18 public static String selector(){ 19 JFileChooser fileChooser = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory()); 20 fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); 21 fileChooser.showOpenDialog(null); 22 // 如果用户选择了文件,返回其绝对路径;否则返回null或空字符串,具体取决于实现 23 if (fileChooser.getSelectedFile() != null) { 24 return fileChooser.getSelectedFile().getAbsolutePath(); 25 } 26 return null; // 或者抛出异常,根据需求而定 27 } 28}

Source: src/cn/oraclestar/sce/system/tools/gui.java

使用内部 Json 工具类进行JSON处理

项目内部的 Json 类提供了一个将 Map<String, String> 转换为JSON字符串以及反向操作的简单实现。

java
1package cn.oraclestar.sce.system.tools; 2 3import java.io.StringReader; 4import java.util.HashMap; 5import java.util.Map; 6import java.util.Properties; 7 8public class Json { 9 // 将 Map<String,String> 转换为 JSON 字符串 10 public static String toJson(Map<String,String> a){ 11 String rawJson = "{"; 12 for (Map.Entry<String,String> temp : a.entrySet()){ 13 rawJson += ("\"" + temp.getKey().toString() + "\":" + "\"" + temp.getValue() + "\","); 14 } 15 rawJson = rawJson.substring(0,rawJson.length() - 1); // 移除最后一个逗号 16 return rawJson + "}"; 17 } 18 19 // 将 JSON 字符串转换为 Map<String,String> 20 public static Map<String,String> toMap(String json){ 21 json = json.replaceAll("[{}]",""); // 移除大括号 22 json = json.replaceAll(",","\n"); // 逗号替换为换行,方便 Properties 解析 23 json = json.replaceAll(":","="); // 冒号替换为等号 24 json = json.replaceAll("\"",""); // 移除引号 25 26 Properties props = new Properties(); 27 StringReader sr = new StringReader(json); 28 try{ 29 props.load(sr); // 使用 Properties 加载 30 Map<String,String> temp_map = new HashMap<String,String>(); 31 for(Map.Entry<Object,Object> e : props.entrySet()){ 32 temp_map.put((String)e.getKey(),(String)e.getValue()); 33 } 34 return temp_map; 35 } catch (Exception e){ 36 e.printStackTrace(); 37 } finally { 38 if(sr != null){ 39 sr.close(); 40 } 41 } 42 return null; // 发生异常时返回 null 43 } 44}

Source: src/cn/oraclestar/sce/system/tools/Json.java

使用内部 JsonArray 工具类进行JSON数组处理

JsonArray 类用于处理包含多个JSON对象的字符串,并将其转换为 List<Map<String, String>>

java
1package cn.oraclestar.sce.system.tools; 2 3import java.util.ArrayList; 4import java.util.HashMap; 5import java.util.List; 6import java.util.Map; 7 8public class JsonArray { 9 10 // 将 Map 列表转换为 JSON 数组字符串 11 public static String toJson(List<Map<String,String>> list) { 12 String rawJson = "["; 13 for (Map<String,String> map : list) { 14 rawJson += Json.toJson(map) + ","; // 复用 Json.toJson 15 } 16 if (list.size() > 0) { 17 rawJson = rawJson.substring(0, rawJson.length() - 1); // 移除最后一个逗号 18 } 19 return rawJson + "]"; 20 } 21 22 // 将 JSON 数组字符串转换为 Map 列表 23 public static List<Map<String,String>> toList(String jsonArray) { 24 List<Map<String,String>> resultList = new ArrayList<>(); 25 26 if (jsonArray.startsWith("[") && jsonArray.endsWith("]")) { 27 jsonArray = jsonArray.substring(1, jsonArray.length() - 1); 28 } 29 30 String[] jsonObjects = splitJsonObjects(jsonArray); // 分割JSON对象 31 32 for (String jsonObject : jsonObjects) { 33 if (jsonObject.trim().isEmpty()) continue; 34 35 Map<String,String> map = Json.toMap(jsonObject); // 复用 Json.toMap 36 if (map != null) { 37 resultList.add(map); 38 } 39 } 40 41 return resultList; 42 } 43 44 // 辅助方法:分割JSON对象,处理嵌套括号 45 private static String[] splitJsonObjects(String jsonArray) { 46 List<String> objects = new ArrayList<>(); 47 int braceCount = 0; 48 int startIndex = 0; 49 50 for (int i = 0; i < jsonArray.length(); i++) { 51 char c = jsonArray.charAt(i); 52 if (c == '{') { 53 braceCount++; 54 } else if (c == '}') { 55 braceCount--; 56 } else if (c == ',' && braceCount == 0) { // 仅在括号平衡时分割 57 objects.add(jsonArray.substring(startIndex, i).trim()); 58 startIndex = i + 1; 59 } 60 } 61 62 if (startIndex < jsonArray.length()) { 63 objects.add(jsonArray.substring(startIndex).trim()); 64 } 65 66 return objects.toArray(new String[0]); 67 } 68}

Source: src/cn/oraclestar/sce/system/tools/JsonArray.java

API 参考

cn.oraclestar.sce.system.tools.Json

提供静态方法,用于将 Map<String, String> 与简单的JSON字符串相互转换。

static String toJson(Map<String,String> a)

将给定的 Map<String, String> 对象转换为JSON格式的字符串。 参数:

  • a (Map<String,String>): 待转换的映射对象。

返回:

  • (String): 转换后的JSON字符串。

static Map<String,String> toMap(String json)

将给定的JSON字符串转换为 Map<String, String> 对象。 参数:

  • json (String): 待转换的JSON字符串。

返回:

  • (Map<String,String>): 转换后的映射对象。若解析失败,返回 null

cn.oraclestar.sce.system.tools.JsonArray

提供静态方法,用于将 List<Map<String, String>> 与JSON数组字符串相互转换,并提供操作JSON数组的方法。

static String toJson(List<Map<String,String>> list)

将给定的 List<Map<String, String>> 对象转换为JSON数组格式的字符串。 参数:

  • list (List<Map<String,String>>): 待转换的映射列表。

返回:

  • (String): 转换后的JSON数组字符串。

static List<Map<String,String>> toList(String jsonArray)

将给定的JSON数组字符串转换为 List<Map<String, String>> 对象。 参数:

  • jsonArray (String): 待转换的JSON数组字符串。

返回:

  • (List<Map<String,String>>): 转换后的映射列表。

static String[] splitJsonObjects(String jsonArray) (private)

辅助方法,用于将JSON数组字符串分割成单个JSON对象的字符串数组。

static String addToJsonArray(String jsonArray, Map<String,String> newMap)

向一个JSON数组字符串中添加一个新的 Map<String, String> 对象。 参数:

  • jsonArray (String): 原始的JSON数组字符串。
  • newMap (Map<String,String>): 要添加的新映射对象。

返回:

  • (String): 添加新对象后的JSON数组字符串。

static String removeFromJsonArray(String jsonArray, int index)

从一个JSON数组字符串中移除指定索引位置的对象。 参数:

  • jsonArray (String): 原始的JSON数组字符串。
  • index (int): 要移除对象的索引位置。

返回:

  • (String): 移除对象后的JSON数组字符串。

static int getSize(String jsonArray)

获取JSON数组字符串中包含的对象数量。 参数:

  • jsonArray (String): 原始的JSON数组字符串。

返回:

  • (int): JSON数组中对象的数量。

cn.oraclestar.sce.system.tools.gui

提供静态方法,用于显示Java Swing的文件选择器以选择文件或目录。

static String selectorD()

打开一个JFileChooser对话框,允许用户选择一个目录。 返回:

  • (String): 用户选择的目录的绝对路径。如果用户取消选择,可能返回 null

static String selector()

打开一个JFileChooser对话框,允许用户选择一个文件。 返回:

  • (String): 用户选择的文件的绝对路径。如果用户取消选择,可能返回 null

相关链接

  • build.sh - 项目的构建脚本,展示了如何编译和打包应用程序。
  • App.java - 应用程序的入口点。
  • gui.java - 包含 JFileChooser 用法的GUI工具类。
  • Json.java - 自定义JSON序列化/反序列化工具类。
  • JsonArray.java - 自定义JSON数组处理工具类。

Sources

(6 files)

On this page