Java JarFile 解析
Java JarFile 解析
package com.github.binarylei;
import java.io.*;
import java.net.URL;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
/**
* @author: leigang
* @version: 2018-06-11
*/
public class JarFileUtils {
// 获取 clazz 所在 jar 包路径
public static String getJarPath(Class clazz) {
String filePath = null;
URL url = clazz.getProtectionDomain().getCodeSource().getLocation();
try {
// 转化为utf-8编码,支持中文
filePath = URLDecoder.decode(url.getPath(), "utf-8");
} catch (Exception e) {
e.printStackTrace();
}
File file = new File(filePath);
filePath = file.getAbsolutePath(); //得到windows下的正确路径
return filePath;
}
// 获取 clazz 所在 jar 包目录
public static String getJarDir(Class clazz) {
String jarPath = getJarPath(clazz);
if (jarPath.endsWith(".jar")) { // 可执行jar包运行的结果里包含".jar"
// 获取jar包所在目录
jarPath = jarPath.substring(0, jarPath.lastIndexOf("/") + 1);
}
return jarPath;
}
// 遍历 jar 包中的所有文件
public static List<String> listJarFile(String path) throws IOException {
JarFile jarFile = new JarFile(path);
Enumeration<JarEntry> entries = jarFile.entries();
ArrayList<String> files = new ArrayList<>();
while (entries.hasMoreElements()) {
JarEntry jarEntry = entries.nextElement();
if (!jarEntry.isDirectory()) {
files.add("jar:file:/" + path + "!/" + jarEntry.getName());
}
}
return files;
}
// 遍历指定 jar 包目录中的文件
public static List<String> listJarFile(String path, String dir) throws IOException {
if (!dir.endsWith("/")) {
dir += "/";
}
JarFile jarFile = new JarFile(path);
Enumeration<JarEntry> entries = jarFile.entries();
ArrayList<String> files = new ArrayList<>();
while (entries.hasMoreElements()) {
JarEntry jarEntry = entries.nextElement();
String filename = jarEntry.getName();
if (!jarEntry.isDirectory() && filename.startsWith(dir)) {
files.add("jar:file:/" + path + "!/" + filename);
}
}
return files;
}
// jar:file:/F:/test-1.0.0.jar!/dir/test.properties
public static void read(String jarFilePath) {
InputStream in = null;
try {
in = new URL(jarFilePath).openStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String s="";
while((s=br.readLine()) != null)
System.out.println(s);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
Java JarFile 解析的更多相关文章
- Java Sax解析
一. Java Sax解析是按照xml文件的顺序一步一步的来解析,在解析xml文件之前,我们要先了解xml文件的节点的种类,一种是ElementNode,一种是TextNode.如下面的这段boo ...
- Java XML解析工具 dom4j介绍及使用实例
Java XML解析工具 dom4j介绍及使用实例 dom4j介绍 dom4j的项目地址:http://sourceforge.net/projects/dom4j/?source=directory ...
- Java泛型解析(03):虚拟机运行泛型代码
Java泛型解析(03):虚拟机运行泛型代码 Java虚拟机是不存在泛型类型对象的,全部的对象都属于普通类,甚至在泛型实现的早起版本号中,可以将使用泛型的程序编译为在1.0虚拟机上可以执行的 ...
- java socket解析和发送二进制报文工具(附java和C++转化问题)
解析: 首先是读取字节: /** * 读取输入流中指定字节的长度 * <p/> * 输入流 * * @param length 指定长度 * @return 指定长度的字节数组 */ pu ...
- Java XML解析器
使用Apache Xerces解析XML文档 一.技术概述 在用Java解析XML时候,一般都使用现成XML解析器来完成,自己编码解析是一件很棘手的问题,对程序员要求很高,一般也没有专业厂商或者开源组 ...
- java基础解析系列(四)---LinkedHashMap的原理及LRU算法的实现
java基础解析系列(四)---LinkedHashMap的原理及LRU算法的实现 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析 ...
- java基础解析系列(五)---HashMap并发下的问题以及HashTable和CurrentHashMap的区别
java基础解析系列(五)---HashMap并发下的问题以及HashTable和CurrentHashMap的区别 目录 java基础解析系列(一)---String.StringBuffer.St ...
- java基础解析系列(六)---深入注解原理及使用
java基础解析系列(六)---注解原理及使用 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析系列(二)---Integer ja ...
- java基础解析系列(七)---ThreadLocal原理分析
java基础解析系列(七)---ThreadLocal原理分析 目录 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析系列(二)-- ...
随机推荐
- 转-JAVA webservice之CXF 范例--http://cxshun.iteye.com/blog/1275408
JAVA webservice之CXF 博客分类: j2ee相关 昨天我们一起学习了一下xfire,今天我们来看一下CXF,为什么学完那个接着学这个呢.因为CXF是在xfire的基础上实现 的,所以我 ...
- Linux环境kafka安装
一. 安装包下载地址 https://www.apache.org/dyn/closer.cgi?path=/kafka/2.0.0/kafka_2.12-2.0.0.tgz 注:下载kafka时有S ...
- TCP 3-Way Handshake (SYN,SYN-ACK,ACK)
http://www.inetdaemon.com/tutorials/internet/tcp/3-way_handshake.shtml
- QT win 安装配置
QT windows 版安装配置 安装包:链接:https://pan.baidu.com/s/1LCj2V3xQ1wB9_7zmE5tV6Q 密码:bn9r 首先安装QT Creator 双击安装文 ...
- 十四.jQuery解析之浏览器嗅探
Chrome和Safrai使用的是webkit作为内核引擎,因此如果 jQuery.browser.webkit为true,则表示浏览器是chrome或safari; 如果jQuery.browser ...
- 【BZOJ】1756: Vijos1083 小白逛公园(线段树)
题目 传送门:QWQ 分析 线段树维护一下最大子序列 维护一下最大前缀 最大后缀 区间和 就ok了 好像只能用结构体..... 代码 #include <bits/stdc++.h> u ...
- 年薪30万的Android程序员必须知道的帖子
https://github.com/Trinea/android-open-project
- Snackbar学习笔记
官方推荐使用Snackbar代替Toast Paste_Image.png Snackbar使用其实就是一句话,跟toast很相似: Snackbar.make(view,"消息已发出& ...
- 「小程序JAVA实战」小程序的视频展示页面初始化(63)
转自:https://idig8.com/2018/09/24/xiaochengxujavashizhanxiaochengxudeshipinzhanshiyemianchushihua62/ 进 ...
- Visio2013 64位下载安装以及破解激活教程
特别说明:以下教程如果未能破解激活,请在断网条件下安装破解!!!! 安装: Visio2013 professional版下载地址:https://pan.baidu.com/s/1gzwcGTevV ...