」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 推出免費 Java 實用程式包

推出免費 Java 實用程式包

發佈於2024-11-07
瀏覽:573

Introducing Free Java Utility Package

面向 Java 后端开发人员的快速且易于使用的编程工具包

在我作为管理员和开发人员的职业生涯中,我多次从无数的免费软件和开源产品中受益。因此,我很自然地也为这个社区做出贡献。

这个 Java 类集合是在各种项目过程中创建的,并将进一步开发。我希望这个工具也能为您服务。

https://java-util.k43.ch

设计目标

  • 易于使用:类和方法必须灵活且易于使用。
  • 无 UI 调用:无需用户界面即可执行所有操作,以允许此工具包用于后台任务或服务器进程。
  • 快速:编写尽可能高性能的代码。
  • 优先使用内存而不是 I/O:在当今世界,内存不再是限制因素。因此,许多操作可以在过去使用(临时)文件的内存中完成(例如,KDB 从 SQL SELECT 创建数据结构,KFile 操作大部分在内存中)。
  • 使用广泛的日志记录:KLog.debug() 函数在整个代码中大量使用,以帮助调试代码。使用每个类中的 toString() 方法在开发过程中显示对象的内部字段值。
  • 平台独立性:独立于平台编写所有内容。
  • 最小化先决条件:继续使用 Java SE 标准库。仅在绝对必要时使用外部 JAR 文件(例如 KSMTPMailer、JDBC 驱动程序)。

日志记录:简单但功能强大

  • 降低调试、信息和错误消息的日志记录复杂性。
  • 使用标准 Java SE 日志记录类,无需任何额外的库。
  • 每条日志记录都包含准确的时间戳和源代码位置。
  • 除了标准 ConsoleHandler 和 FileHandler 之外,还可以将输出发送到任何 JDBC 数据库,或者将错误发送到 SMTP 主机。
  • 提供了五种日志格式化程序:表格行、CSV、JSON、YAML 和 XML。
public static void main(String[] args) {

  KLog.info("Start");

  int result = 0;

  try {
    result = 10 / 0;
  } catch (Exception e) {
    KLog.error(e);
  }

  KLog.debug("Result is "   result);
}
2024-09-16T07:17:11.095 D main[1]:ch.k43.util.KLog:open:459                            ===== Application started 2024-09-16T07:17:11.048 =====
2024-09-16T07:17:11.111 D main[1]:ch.k43.util.KLog:open:460                            Java Utility Package (Freeware) ch.k43.util Version 2024.09.15
2024-09-16T07:17:11.112 D main[1]:ch.k43.util.KLog:open:463                            Homepage java-util.k43.ch - Please send any feedback to [email protected]
2024-09-16T07:17:11.122 D main[1]:ch.k43.util.KLog:open:466                            Host ab-macbook-pro (10.0.0.105)
2024-09-16T07:17:11.122 D main[1]:ch.k43.util.KLog:open:467                            OS platform Mac OS X (Version 14.6.1/aarch64)
2024-09-16T07:17:11.123 D main[1]:ch.k43.util.KLog:open:471                            OS disk space total 3.63 TB, free 2.37 TB, usable 2.37 TB
2024-09-16T07:17:11.123 D main[1]:ch.k43.util.KLog:open:474                            Java version 21 (OpenJDK 64-Bit Server VM - Eclipse Adoptium)
2024-09-16T07:17:11.123 D main[1]:ch.k43.util.KLog:open:477                            Java CPUs 10
2024-09-16T07:17:11.124 D main[1]:ch.k43.util.KLog:open:481                            Java heap maximum 16.00 GB, current 1.00 GB, used 7.68 MB, free 1016.32 MB
2024-09-16T07:17:11.124 D main[1]:ch.k43.util.KLog:open:485                            Java locale de/CH, time UTC  02:00
2024-09-16T07:17:11.125 D main[1]:ch.k43.util.KLog:open:488                            Java classpath ../bin/:../lib/angus-mail-2.0.3.jar:../lib/jakarta.mail-api-2.1.3.jar:../lib/org.json.20230618.jar:../lib/h2-2.2.224.jar:../lib/jakarta.activation-api-2.1.3.jar:../lib/angus-activation-2.0.2.jar
2024-09-16T07:17:11.125 I main[1]:Test:main:9                                          Start
2024-09-16T07:17:11.125 E main[1]:Test:main:16                                         ===> java.lang.ArithmeticException: / by zero
2024-09-16T07:17:11.126 E main[1]:Test:main:16                                         ===> Stack[1]: Test.main(Test.java:14)
2024-09-16T07:17:11.126 D main[1]:Test:main:19                                         Result is 0

数据库:访问任何 JDBC 数据库

  • 加载所需的 JDBC 驱动程序并执行任何 SQL 语句。
  • 可以使用任何符合 JDBC 的数据库。
  • 以原始 Java 格式检索数据(行作为 ArraryList,列作为 Java 对象)。
  • 将结果集格式化为 JSON、YAML、XML、CSV 或表格字符串。
try (KDB db = new KDB(KDB.JDBC_H2, "jdbc:h2:mem:mydb", "", "")) {

  KLog.abort(!db.isConnected(), "Error: "   db.getErrorMessage());

  db.exec("CREATE TABLE ADDRESSES (SEQUENCE INT AUTO_INCREMENT, LASTNAME VARCHAR(20), FIRSTNAME VARCHAR(20))");
  db.exec("INSERT INTO ADDRESSES (LASTNAME, FIRSTNAME) VALUES ('Smith', 'John')");
  db.exec("INSERT INTO ADDRESSES (LASTNAME, FIRSTNAME) VALUES ('Miller', 'Bob')");
  db.exec("INSERT INTO ADDRESSES (LASTNAME, FIRSTNAME) VALUES ('Johnson', 'Eve')");
   db.exec("SELECT * FROM ADDRESSES", 10);

  System.out.println(db.getDataAsTable());
  System.out.println(db.getDataAsJSON());
}
SEQUENCE    LASTNAME             FIRSTNAME            
1           Smith                John                 
2           Miller               Bob                  
3           Johnson              Eve                  
{
  "ADDRESSES": [
    {
      "SEQUENCE": 1,
      "LASTNAME": "Smith",
      "FIRSTNAME": "John"
    },
    {
      "SEQUENCE": 2,
      "LASTNAME": "Miller",
      "FIRSTNAME": "Bob"
    },
    {
      "SEQUENCE": 3,
      "LASTNAME": "Johnson",
      "FIRSTNAME": "Eve"
    }
  ]
}

SMTP:创建并发送消息

  • 创建带有测试、HTML 和文件附件的 MIME 多部分消息。
  • 支持 STARTTLS/TLS 或非 TLS 连接。
  • 支持 OAuth 2.0 和基本身份验证。
KSMTPMailer mailer = new KSMTPMailer();

mailer.setFrom("[email protected]");
mailer.setTo("[email protected]");
mailer.setSubject("Subject");
mailer.addHTML("

Your requested files

"); mailer.addText("Body Text"); mailer.addFile("test1.txt"); mailer.addFile("test2.txt"); mailer.addText("Regards, John"); mailer.send();

HTTP 客户端:简单的标准或 REST 调用

  • 支持 HTTP 和 HTTPS。
  • 支持所有标准 HTTP 方法(GET、POST、PUT、POST 等)。
  • 请求标头 Date、User-Agent、Host 和 Content-Length 会自动添加。
Properties props = new Properties();
props.put("Authorization", "Basic "   K.encodeBase64(userName   ':'   password);

KHTTPClient http = new KHTTPClient();

if (!http.post("https://example.com:4443", props, "HTTP body data")) {
   KLog.abort("HTTP POST failed - "   http.getLastError());
}

K:实用类

  • 对 URL、Base64、CSV、JSON、XML 和 YAML 进行编码/解码。
  • AES256 加密/解密 (AES/CBC/PKCS5Padding)。
  • ZLIB 压缩/解压缩。
  • 生成哈希(MD5、SHA-2 或 SHA-3)。
  • 查询任意DNS记录(MX、A等)。
// Wait 1/4 second
K.waitMilliseconds(250);

// Get DNS MX record(s)
String[] mxRRs = K.queryDNS("MX", "yahoo.com");

//
// AES-256 Encryption/Decryption
//
String secretKey = "This is the secret key";

// Create a simple text file
KFile.writeFile("This is a simple text file", "AES-Text.txt");

// Generate and save random AES-256 initialization vector
KFile.writeFile(K.getRandomBytes(16), "AES.iv");

// Encrypt
byte[] clearText    = KFile.readByteFile("AES-Text.txt");
byte[] initVector   = KFile.readByteFile("AES.iv");
byte[] cipherText   = K.encryptAES256(clearText, secretKey.getBytes(), initVector);
KFile.writeFile(cipherText, "AES-Text.encrypted");

// Decrypt
cipherText  = KFile.readByteFile("AES-Text.encrypted");
initVector  = KFile.readByteFile("AES.iv");
clearText   = K.decryptAES256(cipherText, secretKey.getBytes(), initVector);

玩得开心,让我知道您喜欢什么以及需要改进什么。您可以通过电子邮件 [[email protected]] 或 Mastodon 联系我。

版本聲明 本文轉載於:https://dev.to/andybrunner/introducing-free-java-utility-package-1fph?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 濃縮咖啡;出發時間到了
    濃縮咖啡;出發時間到了
    在過去的兩周里,我用 Go 重寫了我的基於 Rust 的 Java 構建工具,事情進展得更快。 Espresso 運作速度更快且更便攜。 Espresso 最近也能夠編譯和打包它的第一個項目,即我的另一個項目 Kindling。 我希望能得到任何關於 Espresso 的回饋。有很多功能缺失,例如...
    程式設計 發佈於2024-11-07
  • 為什麼我的 JSFiddle 無法運作?
    為什麼我的 JSFiddle 無法運作?
    調試無功能的 JSFiddle嘗試在 JSFiddle 中執行簡約程式碼片段時,使用者可能會遇到意外的功能缺失。此問題通常是由於 JavaScript 設定中的疏忽而引起的。若要解決此問題,請依照下列步驟操作:在 JavaScript 設定中找到「載入類型」下拉清單。 選擇「無換行 - 底部」。 ...
    程式設計 發佈於2024-11-07
  • GenAI Git 提交
    GenAI Git 提交
    產生 git 提交訊息很快就成為開發人員的經典 GenAI 應用程式。 為了解決這個問題,我們將製作一個 GenAIScript 腳本。 此腳本可作為常規 Node.js 自動化腳本並使用 runPrompt 向 LLM 發出呼叫並要求使用者確認產生的文字。 ? 解釋腳本 腳本...
    程式設計 發佈於2024-11-07
  • 什麼是 Webhook 以及如何有效使用它們
    什麼是 Webhook 以及如何有效使用它們
    Webhooks 是集成不同系统并实时发送通知的强大工具。它们允许一个应用程序在事件发生时自动通知另一个应用程序,而无需像传统 API 那样不断发出请求来检查是否有新内容。在这篇文章中,我们将了解它们的工作原理、如何配置它们,并且我们将探索使用 Webhook.site 工具的实际示例,该工具有助...
    程式設計 發佈於2024-11-07
  • 建立 JS 函數以刪除給定字串中的空格。 (使用核心js而不是內建的修剪功能。)
    建立 JS 函數以刪除給定字串中的空格。 (使用核心js而不是內建的修剪功能。)
    const trim = (string) => { let strArr = string.split(""); let trimedStr = []; strArr.forEach((item) => { if (item !== " ") { ...
    程式設計 發佈於2024-11-07
  • GlobalErrorHandler:捕捉從 ErrorBoundary 手中落下的錯誤!
    GlobalErrorHandler:捕捉從 ErrorBoundary 手中落下的錯誤!
    ErrorBoundary 是一個出色的工具,可以捕捉 React 元件拋出的錯誤。您可以根據錯誤本身的性質和位置提供自訂錯誤訊息。但並非所有拋出的錯誤都由 ErrorBoundary 處理!你用這些做什麼? 當考慮非同步錯誤和從 React 外部拋出的錯誤時,ErrorBoundary 不夠。為...
    程式設計 發佈於2024-11-07
  • 如何在Visual Studio 2008中設定可執行檔圖示?
    如何在Visual Studio 2008中設定可執行檔圖示?
    在Visual Studio 2008 中設定可執行檔圖示雖然提供的參考主要針對Visual Studio 2010,但在Visual Studio 中設定可執行檔圖示的原則Studio 2008 基本上都適用。但是,需要記住一些具體的注意事項:使用.ico 檔案您必須為可執行圖示使用.ico 檔案...
    程式設計 發佈於2024-11-07
  • 導入大型 SQL 檔案:為什麼要使用 MySQL 控制台而不是 phpMyAdmin?
    導入大型 SQL 檔案:為什麼要使用 MySQL 控制台而不是 phpMyAdmin?
    在 phpMyAdmin 中匯入大型 SQL 檔案:另一種方法嘗試直接透過 phpMyAdmin 匯入大量 SQL 檔案可能會遇到限制。不過,有一個可靠的替代方法,就是利用 MySQL 控制台。 根據提供的建議,透​​過 MySQL 控制台匯入 SQL 檔案可以繞過 phpMyAdmin 中遇到的問...
    程式設計 發佈於2024-11-07
  • 使用 JSON-LD 提升部落格的 SEO:我如何使用結構化資料添加豐富的結果
    使用 JSON-LD 提升部落格的 SEO:我如何使用結構化資料添加豐富的結果
    Introduction A few years ago in 2022, I attended SCaLE 19x. For those who are not aware, SCaLE is an acronym which stands for Southern Califo...
    程式設計 發佈於2024-11-07
  • create-next-app 使用此套件驗證您的應用程式名稱
    create-next-app 使用此套件驗證您的應用程式名稱
    在本文中,我們分析 create-next-app 如何驗證您的專案名稱。 validate: (name) => { const validation = validateNpmName(basename(resolve(name))) if (validation.valid) { ...
    程式設計 發佈於2024-11-07
  • 幕後反應:到底發生了什麼事?
    幕後反應:到底發生了什麼事?
    React 長期以來一直是首選的 JavaScript 函式庫,並且很容易成為世界上最受歡迎的函式庫之一。此外,隨著 Next.js 和 Remix 等流行框架建立在 React 之上,以及使用 React-Native 進行行動開發的能力,這個函式庫不會很快消失。然而,這樣做的問題是,大多數初學者...
    程式設計 發佈於2024-11-07
  • 使用 Tinder Unblur 個人資料
    使用 Tinder Unblur 個人資料
    Tinder 取消模糊程式碼說明 以下 JavaScript 程式碼是一個腳本,旨在對「喜歡你」部分中的 Tinder 照片進行取消模糊處理。它的工作原理是從 Tinder 的 API 獲取預告圖像並動態更新 DOM 以用清晰的圖像替換模糊的圖像。 async function ...
    程式設計 發佈於2024-11-07
  • 如何確保網站安全:最佳實踐和見解
    如何確保網站安全:最佳實踐和見解
    在當今的數位時代,確保網站的安全至關重要。隨著網路威脅變得越來越複雜,保護您的網站免受潛在漏洞的影響至關重要。以下是增強網站安全性的一些關鍵做法,以及特定網站 HouseOfParty.com 如何在其利基市場中舉例說明安全做法。 使用 HTTPS 描述:HTTPS(安全超文本傳輸協定)會對使用者...
    程式設計 發佈於2024-11-07
  • 如何使用「adjustText」函式庫解決 matplotlib 圖中註解重疊的問題?
    如何使用「adjustText」函式庫解決 matplotlib 圖中註解重疊的問題?
    Matplotlib 中的重疊註釋:綜合解決方案在資料視覺化領域,經常會遇到重疊註釋的問題,其中文字標籤彼此模糊,導致難以解釋圖表。為了應對這項挑戰,人們提出了各種方法,但對於像線重疊的複雜圖形,找到合適的解決方案可能很困難。這篇文章提出了一個使用「adjustText」函式庫的全面解決方案,提供了...
    程式設計 發佈於2024-11-07
  • 如何使用 GORM 檢索列總計?
    如何使用 GORM 檢索列總計?
    使用GORM 檢索列總計在GORM 中,透過幾個簡單的步驟即可實現從資料庫表中取得列的總和.首先,定義一個結構體來表示要檢索的資料。在這種情況下,如果您只需要工資總和,您可以建立一個帶有整數欄位的簡單結構體:type SalarySum struct { Sum float64 }接下來,使...
    程式設計 發佈於2024-11-07

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3