总结:利用原生JDK封装工具类,解析properties配置文件以及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;
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);
}
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;
}
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;
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"));
}
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;
}
}
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 "";
}
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 "";
}
}