在看《从零开始写JavaWeg框架》时候,看到从Jar文件中读取类文件的一段,自己试了一下怎么也读不出来。又上网看了一些文章,说是能读出来,还可能从Java自带的的jce.jar中读取class文件,但就是没有试出来。
后来发现原因在于:没有把要读取的Jar当做Library加到工程中。
具体过程如下:
1,做一个Maven工程,创建一个叫“config.txt”文件在src/main/resouces/config文件夹下(src/main/resouces/config/config.txt)。
2,再创建一个Jar包,里面有一个叫“config.txt”的文件,在config文件夹里面(config/config.txt)。
(创建Jar包的命令:“jar cvf config.jar -C . .”。假设你有一个文件夹叫“temp”,把上面说的config文件在这个temp文件里面,使用CMD进入这个temp文件夹后,使用这个命名就可以打包了)
把要新建的Jar通过IDE工具的Library添加功能(Idea的话,进入“Project Structure”,再选择“Libraries”,再点“+”号,选择Java。再选择你的Jar所在的文件夹或者Jar文件,然后选择做为“Jar Directory”加进来就可以了)
或者通过Maven添加进来,如:
<dependency>
<groupId>com.mycompany.myproduct</groupId>
<artifactId>abc</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>H:/IdeaProjects/Test/src/main/lib/config.jar</systemPath>
</dependency>
(之前试验的时候,只是把Jar包放到Classpath下,没有把它当做Library引进来,所以一直读不出来)
3,加进来后,使用ClassLoader.getResources("config/config.txt")来读取“config/config.txt”资源的话,就可以读出多个“config.txt”资源,如:
file:/D:/IdeaProjects/test/src/main/lib/config.jar!/config/config.txt
file:/D:/IdeaProjects/test/src/main/resources/config/config.txt
(注意:在打印ClassLoader.getResources读出来的Jar文件里面的文件URL的时候,有时候显示"jar:"有时候显示"file:",没有具体测试,但应该和文件类型有关系,在家里读txt文件时显示"file",在公司读class文件时显示"jar")