日期:2014-05-20  浏览次数:20856 次

对clazz.getResource("")的困惑,请朋友们解惑,谢谢!
节约时间,开门见山,不啰嗦了,看代码:
有两个jar包(必须打jar包来分析)
cl1.jar只要一个类外加一个没用内容的test.txt文件位于test包下
Java code

package test;
public class A {}


cl2.jar只要一个类
Java code

package test;

public class Main {
    public static void println(Class clazz) {
        System.out.println("=====" + clazz.getName() + "=====");
        try {
            System.out.println("1 " + clazz.getResource(""));
        } catch (Exception e) {
            System.out.println("1 error " + e.getMessage());
        }
        try {
            System.out.println("2 " + clazz.getResource("/"));
        } catch (Exception e) {
            System.out.println("2 error " + e.getMessage());
        }
        try {
            System.out.println("3 " + clazz.getClassLoader().getResource(""));
        } catch (Exception e) {
            System.out.println("3 error " + e.getMessage());
        }
        System.out.println("4 " + clazz.getResource("test.txt"));
    }

    public static void main(String[] args) {
        println(Main.class);
        try {
            println(Class.forName("test.A"));
        } catch (ClassNotFoundException e) {
            System.out.println("ClassNotFound " + e.getMessage());
        } catch (Exception e) {
            e.printStackTrace();
        }
        try {
            println(Class.forName("oracle.jdbc.driver.OracleDriver"));
        } catch (ClassNotFoundException e) {
            System.out.println("ClassNotFound" + e.getMessage());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}



批处理
BatchFile code

@set CLASSPATH=.;%CLASSPATH%;cl1.jar;ojdbc14_g.jar;

@ECHO java -jar cl2.jar调用**************************************************

@java -jar cl2.jar

@ECHO 将cl2.jar添加到CLASSPATH中
@set CLASSPATH=.;%CLASSPATH%;cl2.jar;

@ECHO java test.Main调用**************************************************
@java test.Main
pause


输出
java -jar cl2.jar调用**************************************************
=====test.Main=====
1 null
2 null
3 null
4 null
ClassNotFound test.A
ClassNotFoundoracle.jdbc.driver.OracleDriver
将cl2.jar添加到CLASSPATH中
java test.Main调用**************************************************
=====test.Main=====
1 null
2 file:/D:/SYJ.WORK/SYJ.WORKSPACE/ws1/cl2/
3 file:/D:/SYJ.WORK/SYJ.WORKSPACE/ws1/cl2/
4 jar:file:/D:/SYJ.WORK/SYJ.WORKSPACE/ws1/cl2/cl1.jar!/test/test.txt
=====test.A=====
1 null
2 file:/D:/SYJ.WORK/SYJ.WORKSPACE/ws1/cl2/
3 file:/D:/SYJ.WORK/SYJ.WORKSPACE/ws1/cl2/
4 jar:file:/D:/SYJ.WORK/SYJ.WORKSPACE/ws1/cl2/cl1.jar!/test/test.txt
=====oracle.jdbc.driver.OracleDriver=====
1 jar:file:/D:/SYJ.WORK/SYJ.WORKSPACE/ws1/cl2/ojdbc14_g.jar!/oracle/jdbc/driver/
2 file:/D:/SYJ.WORK/SYJ.WORKSPACE/ws1/cl2/
3 file:/D:/SYJ.WORK/SYJ.WORKSPACE/ws1/cl2/
4 null



不打jar包输出,eclipse测试的,没有在cmd中测试,但是在cmd下结果应该一致。
=====test.Main=====
1 file:/D:/SYJ.WORK/SYJ.WORKSPACE/ws1/cl2/bin/test/
2 file:/D:/SYJ.WORK/SYJ.WORKSPACE/ws1/cl2/bin/
3 file:/D:/SYJ.WORK/SYJ.WORKSPACE/ws1/cl2/bin/
4 jar:file:/D:/SYJ.WORK/SYJ.WORKSPACE/ws1/cl1/cl1.jar!/test/test.txt
=====test.A=====
1 file:/D:/SYJ.WORK/SYJ.WORKSPACE/ws1/cl2/bin/test/
2 file:/D:/SYJ.WORK/SYJ.WORKSPACE/ws1/cl2/bin/
3 file:/D:/SYJ.WORK/SYJ.WORKSPACE/ws1/cl2/bin/
4 jar:file:/D:/SYJ.WORK/SYJ.WORKSPACE/ws1/cl1/cl1.jar!/test/test.txt