com
|-github
|-test
| |-Test1.class
| |-testdata1.txt
|-Test2.class
|-testdata2.tx2
在这样的编译输出目录下,文件"testdata1.txt"的绝对路径名为:"/com/github/demo/testdata1.txt" 文件"testdata2.txt"的绝对路径名为:"/com/github/testdata2.txt"
如同getResourceAsStream方法文档上的解释:以/开头时是绝对路径,与类路径不一样的是路径上的“."换成了"/"。
接下着咱们看相对路径!
首先咱们必须明确“相对”路径老是指相对于当前class的路径!
例如,若是咱们使用
InputStream is= Test1.class.getResourceAsStream("testdata1.txt");
路径不是以/开头,说明这是一个相对路径,相对的是Test1.class这个文件,因此,这里的“testdata1.txt”所指的正确位置是与Test1.class处于同一目录下的testdata1.txt文件,这一文件是存在的,所引不会报错。
若是咱们按相对路径的方式经过Test1去加载testdata2.txt,则路径应该这样描述:
InputStream is= Test1.class.getResourceAsStream("../testdata2.txt");
是的,用“.."表示上一级目录。
若是咱们按相对路径的方式经过Test2去加载testdata1.txt,则路径应该这样描述:
InputStream is= Test2.class.getResourceAsStream("test/testdata1.txt");
注意!test前是没有/的,这是一个相对路径,是相对于Test2所在包下的test子包里的testdata1.txt文件,因此这个路径也是正确无误的!
2. ClassLoader.getResourceAsStream
class.getResourceAsStream最终调用是ClassLoader.getResourceAsStream
在使用ClassLoader.getResourceAsStream时,路径直接使用相对于classpath的绝对路径,而且不能已 / 开头。html
有如下规则:
1. 若是参数以/开头,则去除/。java
2. 不然把当前类的包名加在参数的前面。
InputStream resourceAsStream = ClassLoader.getSystemResourceAsStream("com/github/demo/1.txt");git