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 解析的更多相关文章

  1. Java Sax解析

    一.   Java Sax解析是按照xml文件的顺序一步一步的来解析,在解析xml文件之前,我们要先了解xml文件的节点的种类,一种是ElementNode,一种是TextNode.如下面的这段boo ...

  2. Java XML解析工具 dom4j介绍及使用实例

    Java XML解析工具 dom4j介绍及使用实例 dom4j介绍 dom4j的项目地址:http://sourceforge.net/projects/dom4j/?source=directory ...

  3. Java泛型解析(03):虚拟机运行泛型代码

    Java泛型解析(03):虚拟机运行泛型代码      Java虚拟机是不存在泛型类型对象的,全部的对象都属于普通类,甚至在泛型实现的早起版本号中,可以将使用泛型的程序编译为在1.0虚拟机上可以执行的 ...

  4. java socket解析和发送二进制报文工具(附java和C++转化问题)

    解析: 首先是读取字节: /** * 读取输入流中指定字节的长度 * <p/> * 输入流 * * @param length 指定长度 * @return 指定长度的字节数组 */ pu ...

  5. Java XML解析器

    使用Apache Xerces解析XML文档 一.技术概述 在用Java解析XML时候,一般都使用现成XML解析器来完成,自己编码解析是一件很棘手的问题,对程序员要求很高,一般也没有专业厂商或者开源组 ...

  6. java基础解析系列(四)---LinkedHashMap的原理及LRU算法的实现

    java基础解析系列(四)---LinkedHashMap的原理及LRU算法的实现 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析 ...

  7. java基础解析系列(五)---HashMap并发下的问题以及HashTable和CurrentHashMap的区别

    java基础解析系列(五)---HashMap并发下的问题以及HashTable和CurrentHashMap的区别 目录 java基础解析系列(一)---String.StringBuffer.St ...

  8. java基础解析系列(六)---深入注解原理及使用

    java基础解析系列(六)---注解原理及使用 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析系列(二)---Integer ja ...

  9. java基础解析系列(七)---ThreadLocal原理分析

    java基础解析系列(七)---ThreadLocal原理分析 目录 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析系列(二)-- ...

随机推荐

  1. IO流常规操作

    IO流 IO就是输入输出,IO设备在计算机中起着举足轻重的作用,IO流也就是输入输出流,用来交互数据,程序和程序交互,程序也可以和网络等媒介交互. 一.IO流的分类 要分类,肯定得站得不同角度来看这个 ...

  2. 在WPF中使用CefSharp嵌入浏览器(转)

    在WPF中使用CefSharp嵌入浏览器   日常开发中,我们需要将一些Web页面嵌入到桌面客户端软件中.下面我们使用CefSharp嵌入浏览器来实现. 首先先介绍一下CefSharp嵌入式浏览器,它 ...

  3. ballerina 学习十九 安全编程

      ballerina 内部提供了几种常用的安全开发模型,token 认证(jwt) basic auth jwt 安全 参考代码 import ballerina/http; http:AuthPr ...

  4. git push 免密码

    git push 免密码 通用情况 使用ssh协议 git add 使用tab键自动补全的中文文件名乱码 jupyter notebook 创建密码 git push 免密码 通用情况 1.使用文件创 ...

  5. thinkphp配置rewrite模式访问时不生效 出现No input file specified解决方法

    使用thinkphp配置rewire模式的路径访问网站时, 直接复制官网的.htaccess文件的代码复制过去 1 2 3 4 5 6 <IfModule mod_rewrite.c>   ...

  6. java 面向对象 — 多态

    注意:如果用父类引用指向子类对象的时候.不可以调用,子类中有但是父类中没有的方法. 抽象 方法没有具体方法,以分号结束.例:public abstract void call(); 1.接口必须要有a ...

  7. [转]Spring 之 Bean 生命周期

    Spring 容器中可以注册多个后处理器,只要它们同时实现 org.springframework.core.Ordered 接口. 下载文件 :内容来自 <精通Spring+4.x++企业应用 ...

  8. 移动自动化测试:Android Studio 、Appium、夜神模拟器

    环境是Window 10 64位 第一章:安装Appium Appium和node.js需要一起安装,他们的依赖关系暂不深究. 1. node.js傻瓜式安装 官网地址:https://nodejs. ...

  9. PHP扩展类ZipArchive实现压缩解压Zip文件和文件打包下载 && Linux下的ZipArchive配置开启压缩 &&搞个鸡巴毛,写少了个‘/’号,浪费了一天

    PHP ZipArchive 是PHP自带的扩展类,可以轻松实现ZIP文件的压缩和解压,使用前首先要确保PHP ZIP 扩展已经开启,具体开启方法就不说了,不同的平台开启PHP扩增的方法网上都有,如有 ...

  10. 一些linux知识和http知识

    1 yum安装比源码编译安装  有的模块不能自定义安装  只能安装默认的模块进行安装 2 关于php的fastcgi 如果使用fastcgi 那么需要启动服务  如果不使用fastcgi 那么不需要启 ...