Java ClassPath(类加载路径)与资源加载
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java ClassPath(类加载路径)与资源加载,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3394字,纯文字阅读大概需要5分钟。
内容图文
![Java ClassPath(类加载路径)与资源加载](/upload/InfoBanner/zyjiaocheng/848/9b7d095561c44954a3712f9a3a9cce8b.jpg)
1)Java ClassPath(类加载路径)
众所周知,Java执行的过程,首先时加载class文件到内存中,然后通过类加载器执行Class的加载过程。ClassPath即搜索class文件的路径,即类加载路径。
2)如何设置ClassPath
① java -classpath 选项设置
命令行或脚本执行Java程序时,通过-classpath选项指定类加载路径,可以是文件夹,或jar文件所在路径,AppClassLoader将加载classpath指定路径下的所有类。
② URLClassLoader中,通过URL的方式定位类加载路径
有兴趣的朋友,可以用tomcat web项目中的class文件做试验。
package org.lin.spl;
import java.io.File;
import java.net.URL;
import java.net.URLClassLoader;
public class Loader {
public static void main(String[] args) throws Exception {
URLClassLoader urlClassLoader = new URLClassLoader(new URL[] {
new File("lib/abc.jar").toURI().toURL(),
new File("WEB-INF/classes").toURI().toURL()
});
Class<?> obj = urlClassLoader.loadClass("org.abc.test.Abc");
System.out.println(obj.getClassLoader());
urlClassLoader.close();
}
}
3)ClassPath下资源加载
ClassPath下的class文件,以及properties等配置文件,在运行时都是可以通过Java代码获取的。
提供一个demo项目,作为资源加载的示例:
resources源文件夹下存放着db.properties配置文件,common-lang3-3.8.1.jar被添加到类路径(IDE中添加)。
ClassLoader、Class提供了方便的API获取类路径下资源(获取资源的URL)。也可以自己显示构造URL,并访问.jar文件。
package org.lin.demo;
import java.net.JarURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.Collections;
import java.util.jar.JarFile;
public class Demo {
public static void main(String[] args) throws Exception {
//1.通过ClassLoader加载 ClassLoader.getResource、ClassLoader.getResourceAsStream均可
ClassLoader loader = ClassLoader.getSystemClassLoader();
//加载配置文件
System.out.println(loader.getResource("db.properties"));
//加载class文件
System.out.println(loader.getResource("org/lin/demo/Demo.class"));
//jar包内的文件亦可加载
System.out.println(loader.getResource("org/apache/commons/lang3/StringUtils.class"));
//ClassLoader加载不能使用绝对路径
System.out.println(loader.getResource("/db.properties")); //输出null
//2.通过Class加载,内部实际上调用ClassLoader加载
Class<Demo> clazz = Demo.class;
//Demo.class所在路径是 org/lin/demo/Demo.class,使用相对路径,起始路径是org/lin/demo
System.out.println(clazz.getResource(""));
//Class加载可使用绝对路径
System.out.println(clazz.getResource("/"));
//相对路径加载db.properties
System.out.println(clazz.getResource("../../../db.properties"));
//绝对路径加载db.properties
System.out.println(clazz.getResource("/db.properties"));
//3.URL路径方式显示加载Jar文件(前面的getResource返回的亦是URL)对象
//URL Uniform Resource Locator 统一资源定位符
//jar协议格式 jar:other/!/entryPath
URL url = new URL("jar:file:/D:/workspaceForTest/demo/lib/commons-lang3-3.8.1.jar!/");
//URLConnection是对URL资源访问的封装接口
URLConnection urlConnection = url.openConnection();
//jar协议的特定实现
JarURLConnection jarURLConnection = (JarURLConnection)urlConnection;
//获取JarFile
JarFile jarFile = jarURLConnection.getJarFile();
//把jar中的每个entry打印出来
Collections.list(jarFile.entries()).forEach(entry -> {
System.out.println(entry.getName());
});
//显示Manifest
jarFile.getManifest().getMainAttributes().entrySet().forEach(entry -> {
System.out.println(entry.getKey() + ":" + entry.getValue());
});
//4.关于user.dir系统属性
//user.dir 即用户工作目录,意思是执行java命令时,执行环境所在目录
//eclipse执行java命令时,以项目根目录作为user.dir
System.out.println(System.getProperty("user.dir"));
}
}
内容总结
以上是互联网集市为您收集整理的Java ClassPath(类加载路径)与资源加载全部内容,希望文章能够帮你解决Java ClassPath(类加载路径)与资源加载所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。