package com.genersoft.iot.vmp.utils; 
 | 
  
 | 
import org.slf4j.Logger; 
 | 
import org.slf4j.LoggerFactory; 
 | 
import org.springframework.stereotype.Component; 
 | 
import org.springframework.util.ClassUtils; 
 | 
  
 | 
import java.io.BufferedReader; 
 | 
import java.io.IOException; 
 | 
import java.io.InputStream; 
 | 
import java.io.InputStreamReader; 
 | 
import java.util.HashMap; 
 | 
import java.util.Map; 
 | 
import java.util.jar.JarEntry; 
 | 
import java.util.jar.JarFile; 
 | 
  
 | 
/** 
 | 
 * 一个优秀的颓废程序猿 
 | 
 */ 
 | 
@Component 
 | 
public class JarFileUtils { 
 | 
    private static Logger log = LoggerFactory.getLogger(JarFileUtils.class); 
 | 
    private static Map<String, String> map = new HashMap<>(); 
 | 
  
 | 
    public  Map<String, String> readJarFile() { 
 | 
        JarFile jarFile = null; 
 | 
        BufferedReader br = null; 
 | 
        try { 
 | 
            // 获取jar的运行路径,因linux下jar的路径为”file:/app/.../test.jar!/BOOT-INF/class!/“这种格式,所以需要去掉”file:“和”!/BOOT-INF/class!/“ 
 | 
            String jarFilePath = ClassUtils.getDefaultClassLoader().getResource("").getPath().replace("!/BOOT-INF/classes!/", ""); 
 | 
            if (jarFilePath.startsWith("file")) { 
 | 
                jarFilePath = jarFilePath.substring(5); 
 | 
            } 
 | 
            log.debug("jarFilePath:" + jarFilePath); 
 | 
            // 通过JarFile的getJarEntry方法读取META-INF/MANIFEST.MF 
 | 
            jarFile = new JarFile(jarFilePath); 
 | 
            JarEntry entry = jarFile.getJarEntry("META-INF/MANIFEST.MF"); 
 | 
            log.info("读取的内容:" + entry.toString()); 
 | 
            // 如果读取到MANIFEST.MF文件内容,则转换为string 
 | 
            if (entry != null) { 
 | 
                InputStream in = jarFile.getInputStream(entry); 
 | 
  
 | 
                StringBuilder sb = new StringBuilder(); 
 | 
                br = new BufferedReader(new InputStreamReader(in)); 
 | 
                String line = ""; 
 | 
                while ((line = br.readLine()) != null) { 
 | 
                    if (line != null && line.contains(":")) { 
 | 
                        int index = line.indexOf(":"); 
 | 
                        map.put(line.substring(0, index).trim(), line.substring(index + 1, line.length()).trim()); 
 | 
                    } 
 | 
                } 
 | 
                return map; 
 | 
            } 
 | 
        } catch (IOException e) { 
 | 
            log.debug("读取MANIFEST.MF文件异常:" + e.getMessage()); 
 | 
        } finally { 
 | 
            try { 
 | 
                if (null != br) { 
 | 
                    br.close(); 
 | 
                } 
 | 
                if (null != jarFile) { 
 | 
                    jarFile.close(); 
 | 
                } 
 | 
            } catch (IOException e) { 
 | 
                e.printStackTrace(); 
 | 
            } 
 | 
        } 
 | 
  
 | 
        return map; 
 | 
  
 | 
    } 
 | 
  
 | 
} 
 |