„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Einführung des kostenlosen Java-Dienstprogrammpakets

Einführung des kostenlosen Java-Dienstprogrammpakets

Veröffentlicht am 07.11.2024
Durchsuche:124

Introducing Free Java Utility Package

Ein schnelles und einfach zu verwendendes Programmier-Toolkit für den Java-Backend-Entwickler

In meinem Berufsleben als Administrator und Entwickler habe ich mehrfach von unzähligen Freeware- und Open-Source-Produkten profitiert. Daher ist es für mich selbstverständlich, auch zu dieser Gemeinschaft beizutragen.

Diese Sammlung von Java-Klassen ist im Rahmen verschiedener Projekte entstanden und wird weiterentwickelt. Ich hoffe, dass dieses Tool auch Ihnen gute Dienste leisten wird.

https://java-util.k43.ch

Designziele

  • Benutzerfreundlichkeit: Die Klassen und Methoden müssen flexibel und einfach zu verwenden sein.
  • Keine UI-Aufrufe: Machen Sie alles ohne Benutzeroberfläche, damit dieses Toolkit für Hintergrundaufgaben oder Serverprozesse verwendet werden kann.
  • Schnell: Schreiben Sie den Code so performant wie möglich.
  • Bevorzugen Sie die Speichernutzung gegenüber E/A: In der heutigen Welt ist Speicher kein limitierender Faktor mehr. Daher können viele Operationen im Speicher ausgeführt werden, wo in der Vergangenheit (temporäre) Dateien verwendet wurden (z. B. erstellt KDB eine Datenstruktur aus SQL SELECT, KFile-Operationen finden größtenteils im Speicher statt).
  • Umfassende Protokollierung verwenden: Die Funktion KLog.debug() wird im gesamten Code häufig verwendet, um das Debuggen Ihres Codes zu erleichtern. Verwenden Sie die in jeder Klasse enthaltenen toString()-Methoden, um die internen Feldwerte der Objekte während der Entwicklung anzuzeigen.
  • Plattformunabhängigkeit: Schreiben Sie alles plattformunabhängig.
  • Voraussetzungen minimieren: Bleiben Sie bei den Java SE-Standardbibliotheken. Verwenden Sie externe JAR-Dateien nur, wenn dies unbedingt erforderlich ist (z. B. KSMTPMailer, JDBC-Treiber).

Protokollierung: Einfach, aber leistungsstark

  • Reduziert die Protokollierungskomplexität für Debug-, Info- und Fehlermeldungen.
  • Verwendet die standardmäßige Java SE-Protokollierungsklasse, ohne dass eine zusätzliche Bibliothek erforderlich ist.
  • Jeder Protokolldatensatz enthält einen genauen Zeitstempel und den Speicherort des Quellcodes.
  • Neben dem Standard-ConsoleHandler und FileHandler kann die Ausgabe an eine beliebige JDBC-Datenbank oder Fehler an einen SMTP-Host gesendet werden.
  • Es stehen fünf Protokollierungsformatierer zur Verfügung: Tabellenzeile, CSV, JSON, YAML und 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

Datenbank: Greifen Sie auf eine beliebige JDBC-Datenbank zu

  • Lädt den erforderlichen JDBC-Treiber und führt eine beliebige SQL-Anweisung aus.
  • Jede JDBC-kompatible Datenbank kann verwendet werden.
  • Daten im rohen Java-Format abrufen (Zeilen als ArraryList, Spalten als Java-Objekte).
  • Ergebnismenge als JSON, YAML, XML, CSV oder tabellarische Zeichenfolge formatieren.
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: Nachricht erstellen und senden

  • Erstellen Sie eine mehrteilige MIME-Nachricht mit Test-, HTML- und Dateianhängen.
  • Unterstützung für STARTTLS/TLS- oder Nicht-TLS-Verbindungen.
  • Unterstützung für OAuth 2.0 und Basisauthentifizierung.
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-Client: Einfache Standard- oder REST-Aufrufe

  • Unterstützt HTTP und HTTPS.
  • Unterstützung für alle Standard-HTTP-Methoden (GET, POST, PUT, POST usw.).
  • Datum des Anforderungsheaders, Benutzeragent, Host und Inhaltslänge werden automatisch hinzugefügt.
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: Utility-Klasse

  • Kodieren/Dekodieren für URL, Base64, CSV, JSON, XML und YAML.
  • AES256 verschlüsseln/entschlüsseln (AES/CBC/PKCS5Padding).
  • ZLIB komprimieren/dekomprimieren.
  • Hash generieren (MD5, SHA-2 oder SHA-3).
  • Fragen Sie einen beliebigen DNS-Eintrag ab (MX, A usw.).
// 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);

Viel Spaß und lassen Sie mich wissen, was Ihnen gefällt und was verbessert werden muss. Sie erreichen mich per E-Mail [[email protected]] oder unter Mastodon.

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/andybrunner/introducing-free-java-utility-package-1fph?1 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3