转自: http://blog.csdn.net/suiusoar/article/details/7530191
- 读取配置文件中的信息
配置文件的内容:
用URLClassLoader读配置文件内容:
- import java.io.IOException;
- import java.net.URL;
- import java.net.URLClassLoader;
- import java.util.Properties;
- public class Testext {
- public static void main(String[] args) throws IOException {
- Properties properties = new Properties();
- URL[] urls = new URL[] { new URL("file:/"
- + System.getProperty("user.dir") + "/ravageWeb/") };
- URLClassLoader ucl = new URLClassLoader(urls);
- //ClassLoader cl = Testext.class.getClassLoader(); //这两行也可以不写
- //cl = ucl; //如果写,下面就要改为:cl.getResourceAsStream...
- properties.load(ucl.getResourceAsStream("resources/testpro.properties"));
- System.out.println(properties.getProperty("sui"));
- }
- }
import java.io.IOException; import java.net.URL; import java.net.URLClassLoader; import java.util.Properties; public class Testext { public static void main(String[] args) throws IOException { Properties properties = new Properties(); URL[] urls = new URL[] { new URL("file:/" + System.getProperty("user.dir") + "/ravageWeb/") }; URLClassLoader ucl = new URLClassLoader(urls); //ClassLoader cl = Testext.class.getClassLoader(); //这两行也可以不写 //cl = ucl; //如果写,下面就要改为:cl.getResourceAsStream... properties.load(ucl.getResourceAsStream("resources/testpro.properties")); System.out.println(properties.getProperty("sui")); } }遇到的问题:1. "/ravageWeb/" 中第二个 / 可写可不写。 但是若改为 "/ravageWeb/resources/" 则resources后必须加 / 否则报NullPointerException
用ClassLoader读配置文件内容:
- import java.io.IOException;
- import java.util.Properties;
- public class Testext {
- public static void main(String[] args) throws IOException {
- Properties properties = new Properties();
- properties.load(Testext.class.getClassLoader()
- .getResourceAsStream("resources/testpro.properties"));
- System.out.println(properties.getProperty("sui"));
- }
- }
import java.io.IOException; import java.util.Properties; public class Testext { public static void main(String[] args) throws IOException { Properties properties = new Properties(); properties.load(Testext.class.getClassLoader() .getResourceAsStream("resources/testpro.properties")); System.out.println(properties.getProperty("sui")); } }
总结:很显然ClassLoader与URLClassLoader的区别是:
ClassLoader只能读位于classpath下的文件(即:resources/testpro.properties必须放到src目录下,编译后进入bin目录);
而URLClassLoader可以读任意目录下的文件!
2. 载入一个类
用ClassLoader载入一个类:
- import java.io.IOException;
- public class Testext {
- public static void main(String[] args) throws IOException,
- ClassNotFoundException {
- Class c = Testext.class.getClassLoader().loadClass("stalk.STalkClient");
- System.out.println(c.getName()); //输出:stalk.STalkClient
- }
- }
import java.io.IOException; public class Testext { public static void main(String[] args) throws IOException, ClassNotFoundException { Class c = Testext.class.getClassLoader().loadClass("stalk.STalkClient"); System.out.println(c.getName()); //输出:stalk.STalkClient } }
用URLClassLoader载入一个类:
- import java.io.IOException;
- import java.net.URL;
- import java.net.URLClassLoader;
- public class Testext {
- public static void main(String[] args) throws IOException,
- ClassNotFoundException {
- URL[] urls = new URL[] { new URL("file:/"
- + System.getProperty("user.dir") + "/ravageWeb/") };
- URLClassLoader ucl = new URLClassLoader(urls);
- Class c = ucl.loadClass("NoPackage");
- System.out.println(c.getName());
- }
- }
import java.io.IOException; import java.net.URL; import java.net.URLClassLoader; public class Testext { public static void main(String[] args) throws IOException, ClassNotFoundException { URL[] urls = new URL[] { new URL("file:/" + System.getProperty("user.dir") + "/ravageWeb/") }; URLClassLoader ucl = new URLClassLoader(urls); Class c = ucl.loadClass("NoPackage"); System.out.println(c.getName()); } }
遇到的问题:"/ravageWeb/" 中第二个 / 必须写,否则报ClassNotFoundException
总结:
ClassLoader只能load位于classpath(src目录)下的类;
而URLClassLoader可以load任意目录下的类!
相关推荐
本篇文章将深入讲解如何使用URLClassLoader加载C盘下的test.jar文件。 首先,了解类加载器的基本概念。在Java中,类加载器是负责查找并加载类的机制。Java虚拟机(JVM)使用一系列的类加载器,包括Bootstrap ...
需要注意的是,`URLClassLoader`默认只加载指定的URLs,如果需要加载父类加载器的类,可以使用`ClassLoader.getSystemClassLoader()`或者`Thread.currentThread().getContextClassLoader()`。此外,为了安全考虑,...
在Java世界中,类加载器(ClassLoader)是关键的组件之一,它负责将类的字节码文件(.class)从文件系统或网络中加载到Java虚拟机(JVM)中,使得程序能够运行。本篇文章将深入探讨ClassLoader的关系网络以及如何...
`URLClassLoader`还提供了`loadClass()`方法,这个方法是`ClassLoader`的抽象方法实现,用于根据类名加载指定的类。当你调用`loadClass()`时,它会遍历提供的URLs,查找对应的.class文件,并将其转换为Class对象。 ...
理解其工作原理和使用方法,对于解决类加载问题、优化应用性能以及进行定制化开发都至关重要。在实际开发中,我们可能会遇到如何动态添加类路径、处理类加载冲突等问题,这些都是`URLClassLoader`使用中的常见挑战。...
默认情况下,Java使用系统ClassLoader(Bootstrap ClassLoader)加载JDK核心库,然后是Extension ClassLoader加载扩展库,最后是App ClassLoader加载应用类路径(ClassPath)下的类。当这些默认ClassLoader无法满足...
创建URLClassLoader后,我们需要确保在不再使用时关闭它,以释放与之关联的资源,尤其是文件句柄。 关闭类加载器的一个常见问题是,当我们动态加载了jar文件中的类后,jar文件会被一个JarFile对象打开,这个对象...
1. 继承ClassLoader:为了实现特定的加载策略,如从网络加载类、从加密数据加载类等,可以继承ClassLoader并重写`findClass()`方法。 2. URLClassLoader:Java提供了一个内置的URLClassLoader,可以直接从指定的URL...
ClassLoader与其他类的不同之处是它是为JVM服务的,属于“公务员”,例如Thread带有getContextClassLoader()和setContextClassLoader()方法; 2、ClassLoader的实现类URLClassLoader完成工作的方法是根据传入的...
此方法能解决所有类的`serialVersionUID`问题,但如果类的属性类型发生变化,仅修改`serialVersionUID`是不够的,因为`serialVersionUID`的变更不仅与类的标识有关,还与类的属性和方法相关。 5. **使用`...
`getConnection` 方法接收一个数据源名称,然后根据名称获取相应的数据源信息,如果还没有加载对应驱动,则使用 `URLClassLoader` 加载驱动类,实例化 `Driver` 对象,并将其注册到 `DriverManager` 中。最后,使用...
2. 使用`classLoader`加载类:通过`loadClass(String className)`方法,我们可以加载指定名称的类。 ```java Class<?> loadedClass = classLoader.loadClass("com.example.LibraryClass"); ``` 3. 实例化类:通过`...
1. 读取源代码:String、Integer、Long、Enum、BigDecimal、ThreadLocal、ClassLoader & URLClassLoader 2. ArrayList & LinkedList、HashMap & LinkedHashMap & TreeMap & ConcurrentHashMap、HashSet & ...
1、用AXMLPrinter2.jar反编译xxx.xml文件 解压xxx.apk,选择main.xml(也可选择其它xml文件,不过xml文件都是乱码),复制到AXMLPrinter2.jar所在目录,通过cmd ...我的处理方法是重新按装JRE较高版本(我原来的是5.0)
使用`findClass`方法加载指定类,并通过`newInstance`方法创建其实例。 - 调用`action`方法返回结果。 #### 五、总结 通过上述示例,我们可以了解到如何在Java程序中动态加载并调用已经编译好的`.class`文件中的...
4. **创建对象与调用方法**:加载类后,我们可以创建对象并调用其公共方法。如果`MyClass`有一个无参构造函数,我们可以这样做: ```java Object instance = clazz.newInstance(); Method method = clazz....
这里需要注意,因为新编译的类不在原始的ClassPath中,所以需要自定义ClassLoader,比如使用URLClassLoader。 ```java URL classUrl = new File("path/to/compiled/classes").toURI().toURL(); // 替换为实际的编译...
这个组件提供了大量用于输入/输出操作的便捷方法,极大地简化了与输入输出流相关的处理工作。本教程将深入探讨如何利用IOUtils来处理类路径下的资源文件,以及其在实际项目中的应用。 首先,让我们关注`commons-io-...
URLClassLoader classLoader = new URLClassLoader(new URL[]{new File("path/to/compiled/classes").toURI().toURL()}, Thread.currentThread().getContextClassLoader()); Class<?> clazz = Class.forName(...