这篇文章主要介绍了详解java读取jar中资源文件及实现代码的相关资料,在开发java项目的时候,经常会用到jar包,这里就说下如何读取,需要的朋友可以参考下
详解java读取jar中资源文件及实现代码
直接上代码,文章的注释部分说的比较清楚,大家可以参考下,
工具类源代码: resourceloadfromjarutil.java
实现代码:
import java.io.ioexception;
import java.io.inputstream;
import java.net.jarurlconnection;
import java.net.malformedurlexception;
import java.net.url;
import java.util.jar.jarentry;
import java.util.jar.jarfile;
import org.apache.commons.io.ioutils;
public class resourceloadfromjarutil {
/**
* @param args
* @throws ioexception
*/
public static void main(string[] args) throws ioexception {
/* 资源文件路径,不能以'/'字符字符开头 */
string resourcepath = "struts-plugin.xml";
/* 获取classpath下的所有jar路径 */
string[] cps = system.getproperty("java.class.path").split(";");
/* 读取本地jar文件 */
for (string cp : cps) {
if (!cp.endswith(".jar")) {
continue;
}
inputstream in = loadresourcefromjarfile(cp, resourcepath);
if (in != null) {
system.err.println(ioutils.tostring(in));
in.close();
}
}
/* 读取本地jar文件 */
for (string cp : cps) {
if (!cp.endswith(".jar")) {
continue;
}
inputstream in = loadresourcefromjarurl(cp, resourcepath);
if (in != null) {
system.err.println(ioutils.tostring(in));
in.close();
}
}
/* 读取网络jar文件 */
inputstream in = loadresourcefromjarurl(
"http://localhost:8080/springstruts2integration/struts2-spring-plugin-2.3.4.1.jar", resourcepath);
if (in != null) {
system.err.println(ioutils.tostring(in));
in.close();
}
}
/**
* 读取jar文件中的资源
*
* @param jarpath
* 本地jar文件路径
* @param respath
* 资源文件所在jar中的路径(不能以'/'字符开头)
* @return 如果资源加载失败,返回null
*/
public static inputstream loadresourcefromjarfile(string jarpath, string respath) {
if (!jarpath.endswith(".jar")) {
return null;
}
try {
jarfile jarfile = new jarfile(jarpath);
jarentry jarentry = jarfile.getjarentry(respath);
if (jarentry == null) {
return null;
}
return jarfile.getinputstream(jarentry);
} catch (ioexception e) {
e.printstacktrace();
return null;
}
}
/**
* 读取jar文件中的资源
*
* @param jarurl
* 本地jar文件或网络上(ttp://host:port/subpath/jarfile.jar)jar文件路径
* @param respath
* 资源文件所在jar中的路径(不能以'/'字符开头)
* @return 如果资源加载失败,返回null
*/
public static inputstream loadresourcefromjarurl(string jarurl, string respath) {
if (!jarurl.endswith(".jar")) {
return null;
}
url url = null;
if (jarurl.startswith("http://")) {
try {
url = new url("jar:" + jarurl + "!/");
} catch (malformedurlexception e) {
e.printstacktrace();
return null;
}
} else {
try {
url = new url("jar:file:/" + jarurl + "!/");
} catch (malformedurlexception e) {
e.printstacktrace();
return null;
}
}
try {
jarurlconnection jarurlconnection;
jarurlconnection = (jarurlconnection) url.openconnection();
jarfile jarfile = jarurlconnection.getjarfile();
jarentry jarentry = jarfile.getjarentry(respath);
if (jarentry == null) {
return null;
}
return jarfile.getinputstream(jarentry);
} catch (ioexception e) {
e.printstacktrace();
return null;
}
}
}
以上就是java如何读取jar中资源文件的实例分析的详细内容。