读取jar包资源代码赏析
2019独角兽企业重金招聘Python工程师标准>>>
该代码来自jfinal engine。读取jar包内代码通常通过classLoader获取
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//package com.jfinal.template.source;import com.jfinal.kit.LogKit;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.JarURLConnection;
import java.net.URL;
import java.net.URLConnection;public class ClassPathSource implements ISource {protected String finalFileName;protected String fileName;protected String encoding;protected boolean isInJar;protected long lastModified;protected ClassLoader classLoader;protected URL url;public ClassPathSource(String fileName) {this((String)null, fileName, "UTF-8");}public ClassPathSource(String baseTemplatePath, String fileName) {this(baseTemplatePath, fileName, "UTF-8");}public ClassPathSource(String baseTemplatePath, String fileName, String encoding) {this.finalFileName = this.buildFinalFileName(baseTemplatePath, fileName);this.fileName = fileName;this.encoding = encoding;this.classLoader = this.getClassLoader();this.url = this.classLoader.getResource(this.finalFileName);if (this.url == null) {throw new IllegalArgumentException("File not found : \"" + this.finalFileName + "\"");} else {this.processIsInJarAndlastModified();}}protected void processIsInJarAndlastModified() {try {URLConnection conn = this.url.openConnection();if (!"jar".equals(this.url.getProtocol()) && !(conn instanceof JarURLConnection)) {this.isInJar = false;this.lastModified = conn.getLastModified();} else {this.isInJar = true;this.lastModified = -1L;}} catch (IOException var2) {throw new RuntimeException(var2);}}protected ClassLoader getClassLoader() {ClassLoader ret = Thread.currentThread().getContextClassLoader();return ret != null ? ret : this.getClass().getClassLoader();}protected String buildFinalFileName(String baseTemplatePath, String fileName) {String finalFileName;if (baseTemplatePath != null) {char firstChar = fileName.charAt(0);if (firstChar != '/' && firstChar != '\\') {finalFileName = baseTemplatePath + "/" + fileName;} else {finalFileName = baseTemplatePath + fileName;}} else {finalFileName = fileName;}if (finalFileName.charAt(0) == '/') {finalFileName = finalFileName.substring(1);}return finalFileName;}public String getKey() {return this.fileName;}public String getEncoding() {return this.encoding;}protected long getLastModified() {try {URLConnection conn = this.url.openConnection();return conn.getLastModified();} catch (IOException var2) {throw new RuntimeException(var2);}}public boolean isModified() {return this.isInJar ? false : this.lastModified != this.getLastModified();}public StringBuilder getContent() {if (!this.isInJar) {this.lastModified = this.getLastModified();}InputStream inputStream = this.classLoader.getResourceAsStream(this.finalFileName);if (inputStream == null) {throw new RuntimeException("File not found : \"" + this.finalFileName + "\"");} else {return loadFile(inputStream, this.encoding);}}public static StringBuilder loadFile(InputStream inputStream, String encoding) {StringBuilder ret = new StringBuilder();BufferedReader br = null;StringBuilder var5;try {br = new BufferedReader(new InputStreamReader(inputStream, encoding));String line = br.readLine();if (line != null) {ret.append(line);while((line = br.readLine()) != null) {ret.append('\n').append(line);}var5 = ret;return var5;}var5 = ret;} catch (Exception var15) {throw new RuntimeException(var15);} finally {if (br != null) {try {br.close();} catch (IOException var14) {LogKit.error(var14.getMessage(), var14);}}}return var5;}public String toString() {StringBuilder sb = new StringBuilder();sb.append("In Jar File: ").append(this.isInJar).append("\n");sb.append("File name: ").append(this.fileName).append("\n");sb.append("Final file name: ").append(this.finalFileName).append("\n");sb.append("Last modified: ").append(this.lastModified).append("\n");return sb.toString();}
}
转载于:https://my.oschina.net/guoenzhou/blog/1634810
读取jar包资源代码赏析相关推荐
- java 如何读取jar包内资源文件_【解惑】深入jar包:从jar包中读取资源文件
我们常常在代码中读取一些资源文件(比如图片,音乐,文本等等).在单独运行的时候这些简单的处理当然不会有问题.但是,如果我们把代码打成一个jar包以后,即使将资源文件一并打包,这些东西也找不出来了.看看 ...
- java 读取jar包中的文件
文章目录 项目resource中文件路径和jar包中文件路径的区别 正常读取 jar包读取 完整代码: 项目resource中文件路径和jar包中文件路径的区别 打成jar包后,是一个整体的文件. 正 ...
- 读取jar包所在目录和jar包内文件
在网上查找了很多关于读取jar包的相对路径资料,但是大多都是读取jar包内文件的方法介绍,甚至有人将读取包内路径的方法混淆为读取包外路径的方法.经过本人亲自的测试,对于两种读取文件的方 ...
- java原生和SpringBoot读取jar包中MANIFEST.MF的方式
我们经常看到java的一些jar包META-INF目录下包含一个MANIFEST.MF文件,里面包含一些版本信息,标题,实现组织,很多第三方的jar包还会自定义一个属性. 本文讲解如何读取jar包中M ...
- 如何读取jar包外的properties和log4j.properties等配置文件
一般在项目中使用properties配置文件的时候都将相关的properties文件放在src目录下,在将该app打包生成jar后,相应的properties配置文件生... 一般在项目中使用prop ...
- Java如何读取JAR包外的properties文件及打成jar包后无法读取到jar包内的properties文件
项目中,经常把一部分功能独立出来,做一个java project,然后打成jar包供其他项目引用.这时候,如果jar包中需要读取配置文件信息,则很少把该配置打进jar包,因为它不方便修改,更多都是采 ...
- 如何读取jar包外的properties文件和log4j.properties
2019独角兽企业重金招聘Python工程师标准>>> 时间有限,不做排版和具体讲述问题产生的过程,下面是我的解决方案,已证实有效,其中Log4jP = "log4j.pr ...
- 打包部署后无法读取jar包里的文件(实测可行,Java中读取jar包中的文件)
打包部署后无法读取jar包里的文件 Java中读取jar包中的文件 linux中无法读取jar包中的内容(windows可以的!),如何解决 一.背景 项目中免不了需要读取文件,如果文件用绝对路径读取 ...
- html5调用封装库jar,H5项目如何调用aar、jar包资源(HBuilder离线打包实践)
H5项目如何调用aar.jar包资源(HBuilder离线打包实践) H5项目如何调用aar.jar包资源(HBuilder离线打包实践) 我司项目提供Android的SDK(jar,aar),而客户 ...
最新文章
- 【java 性能优化实战】4 工具实践:基准测试 JMH,精确测量方法性能
- 类的练习2——python编程从入门到实践
- BZOJ3238: [Ahoi2013]差异
- c语言计算多个整数加减,求用C编个大数加减法运算程序
- EditPlus连接远程Linux虚拟机
- Rabbitmq消息过期时间设置
- 操作系统高响应比优先调度算法代码_进程调度
- linux 设置防火墙ip网段,网络防御-防火墙设置IP网段规则
- url传参的编码与解码
- 汽车传感器:自动驾驶“第一步”
- 【程序人生】从外包到大厂,你知道我这一个月是怎么过的吗?
- leach协议c++代码_leach协议.doc
- Mybatis(一) 主配置文件
- 网络打印服务器存打印文件,网络打印机文件打印顺序问题
- python_pandas_xmind
- 【零基础学Python】爬虫篇 :第十四节--爬虫+词云解决实际问题
- 总结702考研复习DAY26
- 茶云导航网站源码v1.2 PHP带后台管理
- JAVA java学习(2)——————java下载安装与环境配置
- oracle显示人民币,在Oracle中将小写人民币转换成大写
热门文章
- myeclipse下拷贝的项目,tomcat下部署名称和导出为war包的名称默认值修改
- unicode编码过php的magic_quotes_gpc设置为on的mysql注入与文件写入(待测试)
- 巧用360加快您的开机速度
- 深入体验c语言项目开发 光盘,深入体验C语言项目开发
- Python发展迅猛,如何在Python热中脱颖而出了?
- leetcode前缀树java_LeetCode 实现 Trie (前缀树)
- windows下bat处理执行Mysql的sql语句
- html -%3e 转义,特殊字符html,css转义大全
- 计算机学硕哪些学校好考,什么学校研究生好考,计算机专业研究生哪个学校好考一点...
- 主席树 ---- CF 1422F. Boring Queries(由离线推出在线如何求的 ,求解多次询问的区间LCM)