Java加载类路径下资源
来源:互联网 发布:儿童阅读软件下载 编辑:程序博客网 时间:2024/06/05 19:31
一、Java加载类路径下资源
Java加载类路径下资源有两种方式:类对象实例的相关方法和类加载器实例的相关方法。例子如下:
//类对象实例的相关方法Main.class.getResource("a.txt");Main.class.getResource("/a.txt");//类加载器实例的相关方法Main.class.getClassLoader().getResource("a.txt");
类对象实例的方式最后是通过类加载器实例的方式来加载类路径下资源的,因而我们接下来只讨论类加载器实例的方式。
二、类加载器实例方式加载类路径下资源
根据“类加载器”的介绍,可知有3种类加载器:引导类加载器,扩展类加载器,系统类加载器。我们这里所说的“类路径”是指可通过“-classpath”选项进行设置的类路径,因而我们谈论的类加载器也只是系统类加载器。
在一个Java应用程序运行的过程中,一般会存在多个类加载器实例。比如在如下代码中:
package com.dslztx.java;public class MyClass { public static void main(String[] args) { System.out.println(MyClass.class.getClassLoader()); System.out.println(ClassLoader.getSystemClassLoader()); }}
自定义应用类“MyClass”是由系统类加载器加载的,因而MyClass.class.getClassLoader()
得到的是一个系统类加载器类实例;ClassLoader.getSystemClassLoader()
得到的也是一个系统类加载器类实例。
一般我们统一选用ClassLoader.getSystemClassLoader()
的方式即可。
三、举例说明
现在有一个Java项目,目录结构如图1所示。项目下有一个“Main.java”文件,内容如下所示:
package com.dslztx.java;public class Main { public static void main(String[] args) { ClassLoader c1 = Main.class.getClassLoader(); ClassLoader c2 = ClassLoader.getSystemClassLoader(); System.out.println("Using Main.class.getClassLoader()"); System.out .println("file a finding the address is" + c1.getResource("a") == null ? "null" : c1.getResource("a")); System.out .println("file b finding the address is" + c1.getResource("b") == null ? "null" : c1.getResource("b")); System.out .println("file c finding the address is" + c1.getResource("c") == null ? "null" : c1.getResource("c")); System.out.println("Using ClassLoader.getSystemClassLoader()"); System.out .println("file a finding the address is" + c2.getResource("a") == null ? "null" : c2.getResource("a")); System.out .println("file b finding the address is" + c2.getResource("b") == null ? "null" : c2.getResource("b")); System.out .println("file c finding the address is" + c2.getResource("c") == null ? "null" : c2.getResource("c")); }}
从“Classpath”目录下执行javac src/com/dslztx/java/Main.java
命令,进行编译,此时目录结构如图2所示。
图1
图2
执行java -classpath "./src:./lib" com.dslztx.java.Main
命令,可以发现执行结果如图3所示。只能找到“a”和“b”文件,因为这两个文件的父目录是类路径。
图3
执行java -classpath ".:./src:./lib" com.dslztx.java.Main
命令,可以发现执行结果如图4所示。能够找到“a”,“b”和“c”这3个文件,因为这3个文件的父目录都是类路径。
图4
执行java -classpath "./src" com.dslztx.java.Main
命令,可以发现执行结果如图5所示。只能够找到“b”这个文件,因为只有该文件的父目录是类路径。
图5
- Java加载类路径下资源
- java从类路径下加载资源文件
- 不同路径下加载资源
- java 资源文件加载路径
- java普通类下设置资源文件相对路径
- java 加载类路径
- 类加载器获取资源路径
- 使用类路径加载资源文件
- 资源加载路径问题
- WPF下使用Uri加载相对路径资源
- Java 不同路径下加载文件
- Java加载资源文件时的路径问题
- java加载资源路径以及ClassPath的关系
- Java中各类ClassLoader加载时资源搜索路径
- JAVA ResourceBundle 加载外部路径资源文件方式
- 用java类加载器加载资源
- java获取类加载路径
- Servlet_10_获取类路径下的资源
- Web项目的保安——Filter(过滤器)
- AfxBeginThread创建用户界面线程
- TCP/IP、Http、Socket的区别
- 设置Java类路径的注意事项
- web的负载均衡 集群高可用(HA)解决方案
- Java加载类路径下资源
- Most Powerful (zoj 3471 状压dp 点集配对)
- 构造函数
- SpringMVC 常用注解简介
- AHB和APB的学习
- 所学知识
- 94. Binary Tree Inorder Traversal
- ns2输出调试信息及trace
- 解决ubuntu14.04使用Quartus II无法调用Modelsim-Altera的问题