总结:利用原生JDK封装工具类,解析properties配置文件以及MF清单文件

news/2025/2/13 6:05:07/

总结:利用原生JDK封装工具类,解析properties配置文件以及MF清单文件

  • 一·背景描述:
    • 1.在不同的项目中,项目使用的开发框架都不一样,甚至是JDK原生开发模式。此时解析配置文件以及jar包中的清单文件,就只能利用JDK原生办法解析,而无法利用流行热门框架解析
    • 2.了解JDK原生解析配置文件以及清单文件的实现方式,有助于自己理解各种开源框架的底层实现方式。因为大多数开源框架本质就是在JDK、JavaEE的基础上,利用各种设计模式进行封装而来,从而提升程序员的开发效率。
  • 二·properties配置文件解析工具类:该工具类也可以用于解析MANIFEST.MF清单文件
  • 三·MANIFEST.MF清单文件解析工具类:

一·背景描述:

1.在不同的项目中,项目使用的开发框架都不一样,甚至是JDK原生开发模式。此时解析配置文件以及jar包中的清单文件,就只能利用JDK原生办法解析,而无法利用流行热门框架解析

2.了解JDK原生解析配置文件以及清单文件的实现方式,有助于自己理解各种开源框架的底层实现方式。因为大多数开源框架本质就是在JDK、JavaEE的基础上,利用各种设计模式进行封装而来,从而提升程序员的开发效率。

二·properties配置文件解析工具类:该工具类也可以用于解析MANIFEST.MF清单文件

package utils;import java.io.File;
import java.io.FileInputStream;
import java.util.Properties;/*** @Description Properties解析工具类,manifest.mf文件工具类* 注意:一个key后面的值不能换行,否则会读取不完整* <p>* Copyright @ 2022 Shanghai Mise Co. Ltd.* All right reserved.* <p>* @Author LiuMingFu* @Date 2023-05-17 16:25*/
public class PropUtil {public static void main(String[] args) {String fileUrl = "/Users/ideal/Desktop/web/test/shgc_WeChat2OA_config.properties";String keySecret = getPropValue(fileUrl, "key_secret");System.out.println(keySecret);File file = new File(fileUrl);String port = getPropValue(file, "port");System.out.println(port);}/*** 解析配置文件/manifest.mf文件,获取指定key的value值** @param filePath Properties配置文件路径/manifest.mf文件路径* @param key      需要获取值的key* @return* @author LiuMingFu* @date 2023-05-17*/public static String getPropValue(String filePath, String key) {String value = "";try {FileInputStream fileInput = new FileInputStream(filePath);Properties prop = new Properties();prop.load(fileInput);value = prop.getProperty(key);} catch (Exception ex) {ex.printStackTrace();}return value;}/*** 解析配置文件/manifest.mf文件,获取指定key的value值** @param file Properties配置文件对象/manifest.mf文件对象* @param key  需要获取值的key* @return* @author LiuMingFu* @date 2023-05-17*/public static String getPropValue(File file, String key) {String value = "";try {FileInputStream fileInput = new FileInputStream(file);Properties prop = new Properties();prop.load(fileInput);value = prop.getProperty(key);} catch (Exception ex) {ex.printStackTrace();}return value;}}

三·MANIFEST.MF清单文件解析工具类:

package utils;import java.io.IOException;
import java.util.Map;
import java.util.jar.Attributes;
import java.util.jar.JarFile;
import java.util.jar.Manifest;import static java.util.jar.Attributes.Name.MAIN_CLASS;/*** @Description TODO* <p>* Copyright @ 2022 Shanghai Mise Co. Ltd.* All right reserved.* <p>* @Author LiuMingFu* @Date 2023/11/9 10:52*/
public class JarUtil {public static void main(String[] args) throws IOException {String filePath = "/Users/ideal/Desktop/lib/Hello2.jar";Attributes attributes = parseManifestFile(filePath);for (Object o : attributes.keySet()) {System.out.println("key=" + o + "  value=" + attributes.getValue(o.toString()));}System.out.println(getMainClass(filePath));System.out.println(getMFValue(filePath, "Created-By"));}/*** 解析jar包中的MANIFEST.MF(manifest.mf)文件,返回一个类似map的集合对象** @param jarFilePath jar包路径* @return* @author LiuMingFu* @date 2023/11/9*/public static Attributes parseManifestFile(String jarFilePath) throws IOException {if (jarFilePath != null && !"".equals(jarFilePath)) {JarFile jarFile = new JarFile(jarFilePath);Manifest manifest = jarFile.getManifest();Attributes mainAttributes = manifest.getMainAttributes();return mainAttributes;} else {return null;}}/*** 解析jar包中的MANIFEST.MF(manifest.mf)文件,返回一个Main-Class的属性值** @param jarFilePath jar包路径* @return* @author LiuMingFu* @date 2023/11/9*/public static String getMainClass(String jarFilePath) throws IOException {JarFile jarFile = new JarFile(jarFilePath);Manifest mf = jarFile.getManifest();Attributes mainAttributes = mf.getMainAttributes();for (Map.Entry<Object, Object> entry : mainAttributes.entrySet()) {String key = entry.getKey().toString();if (key.equalsIgnoreCase(MAIN_CLASS.toString())) {return entry.getValue().toString();}}return "";}/*** 解析jar包中的MANIFEST.MF(manifest.mf)文件,返回一个指定key的属性值** @param jarFilePath jar包路径* @param key         manifest.mf文件的一个key* @return* @author LiuMingFu* @date 2023/11/9*/public static String getMFValue(String jarFilePath, String key) throws IOException {JarFile jarFile = new JarFile(jarFilePath);Manifest mf = jarFile.getManifest();Attributes mainAttributes = mf.getMainAttributes();for (Map.Entry<Object, Object> entry : mainAttributes.entrySet()) {String keyTemp = entry.getKey().toString();if (keyTemp.equalsIgnoreCase(key)) {return entry.getValue().toString();}}return "";}
}

http://www.ppmy.cn/news/1212327.html

相关文章

C#中在.NET 7.0控制台应用使用ADO.NET的方法

目录 一、新建.NET Framwork类、通过ADO.NET访问数据库并生成库 1.操作流程 2.库源码 3.生成库 二、再建 .NET 7.0控制台应用、依赖像引用库 1. 操作流程 2.program.cs源码 3.在program.cs中查看类Class1定义 作者在上一篇文章中曾说过.NET 7.0框架下不支持ADO…

numpy 基础使用

NumPy是Python中科学计算的基础包。它是一个Python库&#xff0c;提供多维数组对象&#xff0c;各种派生对象&#xff08;如掩码数组和矩阵&#xff09;&#xff0c;以及用于数组快速操作的各种API&#xff0c;有包括数学、逻辑、形状操作、排序、选择、输入输出、离散傅立叶变…

Python爬虫实战-批量爬取美女图片网下载图片

大家好&#xff0c;我是python222小锋老师。 近日锋哥又卷了一波Python实战课程-批量爬取美女图片网下载图片&#xff0c;主要是巩固下Python爬虫基础 视频版教程&#xff1a; Python爬虫实战-批量爬取美女图片网下载图片 视频教程_哔哩哔哩_bilibiliPython爬虫实战-批量爬取…

springboot和spring对比

spring的出现 大家都知道spring是大概2003年左右开始出现流行的&#xff0c;是一个轻量级的Java 开发框架&#xff0c;它是为了解决企业应用开发的复杂性而创建的。Spring 的核心是控制反转&#xff08;IoC&#xff09;和面向切面编程&#xff08;AOP&#xff09;。Spring 是可…

Docker 安装 MySQL 8

Docker 安装 MySQL 8 本文实现在docker中安装MySQL 8&#xff0c;含文件映射、密码、mysql参数设置等 一、拉取镜像 其他版本可以换为你需要的版本号 docker pull mysql:8.0.20二、运行容器 注意&#xff1a;第一个-v的第一个路径是宿主机的数据存储位置第二个-v的第一个路…

基于遗传算法改进的GRNN多输入多输出回归预测,基于多目标遗传算法+GRNN的帕累托前沿求解,基于遗传工具箱调用GRNN模型的多目标求解

目录 背影 遗传算法的原理及步骤 基本定义 编码方式 适应度函数 运算过程 代码 结果分析 展望 完整代码下载链接:grnn多输入多输出训练测试,遗传算法改进grnn神经网络,NSGA-2多目标遗传算法,多目标遗传算法和grnn结合优化资源-CSDN文库 https://download.csdn.net/downloa…

【深度学习环境】windows安装 NVIDIA Docker

摘要 不要安装 Docker Desktop&#xff01;我们将在 Ubuntu 中自行安装 Docker。 请安装 Windows 10 Insider Build 或 Windows 11 &#xff08;Beta也行&#xff09;。&#xff08;稳定发行版无法在 WSL 2 中使用 GPU&#xff09; 请安装 WSL 2 w/Ubuntu 20.04 或同等版本。…

C++进阶-STL set/multiset容器和map容器的简单认识

set/multiset容器的简单认识 set基本概念set与multiset 的区别&#xff1a;set容器的构造和赋值set容器的大小和交换set容器的插入与删除set容器的查找和统计set容器-set和multiset的区别set容器内置类型指定排序规则set容器自定义数据类型指定排序规则 pair对组创建map容器的基…