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包资源代码赏析相关推荐

  1. java 如何读取jar包内资源文件_【解惑】深入jar包:从jar包中读取资源文件

    我们常常在代码中读取一些资源文件(比如图片,音乐,文本等等).在单独运行的时候这些简单的处理当然不会有问题.但是,如果我们把代码打成一个jar包以后,即使将资源文件一并打包,这些东西也找不出来了.看看 ...

  2. java 读取jar包中的文件

    文章目录 项目resource中文件路径和jar包中文件路径的区别 正常读取 jar包读取 完整代码: 项目resource中文件路径和jar包中文件路径的区别 打成jar包后,是一个整体的文件. 正 ...

  3. 读取jar包所在目录和jar包内文件

            在网上查找了很多关于读取jar包的相对路径资料,但是大多都是读取jar包内文件的方法介绍,甚至有人将读取包内路径的方法混淆为读取包外路径的方法.经过本人亲自的测试,对于两种读取文件的方 ...

  4. java原生和SpringBoot读取jar包中MANIFEST.MF的方式

    我们经常看到java的一些jar包META-INF目录下包含一个MANIFEST.MF文件,里面包含一些版本信息,标题,实现组织,很多第三方的jar包还会自定义一个属性. 本文讲解如何读取jar包中M ...

  5. 如何读取jar包外的properties和log4j.properties等配置文件

    一般在项目中使用properties配置文件的时候都将相关的properties文件放在src目录下,在将该app打包生成jar后,相应的properties配置文件生... 一般在项目中使用prop ...

  6. Java如何读取JAR包外的properties文件及打成jar包后无法读取到jar包内的properties文件

    项目中,经常把一部分功能独立出来,做一个java  project,然后打成jar包供其他项目引用.这时候,如果jar包中需要读取配置文件信息,则很少把该配置打进jar包,因为它不方便修改,更多都是采 ...

  7. 如何读取jar包外的properties文件和log4j.properties

    2019独角兽企业重金招聘Python工程师标准>>> 时间有限,不做排版和具体讲述问题产生的过程,下面是我的解决方案,已证实有效,其中Log4jP = "log4j.pr ...

  8. 打包部署后无法读取jar包里的文件(实测可行,Java中读取jar包中的文件)

    打包部署后无法读取jar包里的文件 Java中读取jar包中的文件 linux中无法读取jar包中的内容(windows可以的!),如何解决 一.背景 项目中免不了需要读取文件,如果文件用绝对路径读取 ...

  9. html5调用封装库jar,H5项目如何调用aar、jar包资源(HBuilder离线打包实践)

    H5项目如何调用aar.jar包资源(HBuilder离线打包实践) H5项目如何调用aar.jar包资源(HBuilder离线打包实践) 我司项目提供Android的SDK(jar,aar),而客户 ...

最新文章

  1. 【java 性能优化实战】4 工具实践:基准测试 JMH,精确测量方法性能
  2. 类的练习2——python编程从入门到实践
  3. BZOJ3238: [Ahoi2013]差异
  4. c语言计算多个整数加减,求用C编个大数加减法运算程序
  5. EditPlus连接远程Linux虚拟机
  6. Rabbitmq消息过期时间设置
  7. 操作系统高响应比优先调度算法代码_进程调度
  8. linux 设置防火墙ip网段,网络防御-防火墙设置IP网段规则
  9. url传参的编码与解码
  10. 汽车传感器:自动驾驶“第一步”
  11. 【程序人生】从外包到大厂,你知道我这一个月是怎么过的吗?
  12. leach协议c++代码_leach协议.doc
  13. Mybatis(一) 主配置文件
  14. 网络打印服务器存打印文件,网络打印机文件打印顺序问题
  15. python_pandas_xmind
  16. 【零基础学Python】爬虫篇 :第十四节--爬虫+词云解决实际问题
  17. 总结702考研复习DAY26
  18. 茶云导航网站源码v1.2 PHP带后台管理
  19. JAVA java学习(2)——————java下载安装与环境配置
  20. oracle显示人民币,在Oracle中将小写人民币转换成大写

热门文章

  1. myeclipse下拷贝的项目,tomcat下部署名称和导出为war包的名称默认值修改
  2. unicode编码过php的magic_quotes_gpc设置为on的mysql注入与文件写入(待测试)
  3. 巧用360加快您的开机速度
  4. 深入体验c语言项目开发 光盘,深入体验C语言项目开发
  5. Python发展迅猛,如何在Python热中脱颖而出了?
  6. leetcode前缀树java_LeetCode 实现 Trie (前缀树)
  7. windows下bat处理执行Mysql的sql语句
  8. html -%3e 转义,特殊字符html,css转义大全
  9. 计算机学硕哪些学校好考,什么学校研究生好考,计算机专业研究生哪个学校好考一点...
  10. 主席树 ---- CF 1422F. Boring Queries(由离线推出在线如何求的 ,求解多次询问的区间LCM)