对java中路径的一些理解

开始前先贴一下项目结构

对java中路径的一些理解


 public class TestLocation {
@Test
public void test1(){
String s1 = Objects.requireNonNull(TestLocation.class.getResource("")).toString();//------------------
out.println(s1);
String s2 = Objects.requireNonNull(TestLocation.class.getResource("/")).toString();
out.println(s2);
}
}

对java中路径的一些理解

从这里可以看出区别
TestLocation.class.getResource("")
TestLocation.class.getResource("/")

classes是编译后的文件夹,

  getResource中啥也不写,就是从当前类编译后所在的目录查找

  getResource中写 / ,就是从编译后文件夹的根目录查找

现在我们做个测试,查找test目录下编译后的文件

对java中路径的一些理解

结果和我预想的一样。


 @Test
public void test2(){
String s1 = Objects.requireNonNull(Thread.currentThread().getContextClassLoader().getResource("")).toString();
out.println(s1);
}

对java中路径的一些理解

可以看出这个结果和①处相同。

再来做个测试

对java中路径的一些理解

对java中路径的一些理解

两张图的区别在于

  后者我再getRes的时候加上了包名前缀!

  正如我注释中写的, 类.class.getRes只在类所在的目录中查找资源文件,即使加上了包名前缀也没效果。


那么下一个问题,

Thread.currentThread().getContextClassLoader().getResource()是如何查找文件的?---------------------------未完待续
上一篇:Android深度探索-卷1第八章心得体会


下一篇:Android深度探索-卷1第十章心得体会