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

总结:利用原生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后面的值不能换行,否则会读取不完整
 * 

* Copyright @ 2022 Shanghai Mise Co. Ltd. * All right reserved. *

* @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
 * 

* Copyright @ 2022 Shanghai Mise Co. Ltd. * All right reserved. *

* @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 ""; } }

你可能感兴趣的:(总结,java,properties解析,MF清单文件解析,manifest文件解析,配置文件解析工具类,MANIFEST.MF)