读书人

怎么用Spring读取JAR中的文件

发布时间: 2012-08-21 13:00:22 作者: rapoo

如何用Spring读取JAR中的文件

使用如下方式读取JAR中的文件出错

类路径下放了一个jarfile.jar,如下所示:

如上所示,com/yyy/1.txt放在jarfile.jar中。
我原来使用如下的方式读取这个JAR中的文件:

@Test  public void testClasspathAsteriskPrefixLimit() throws IOException {      ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();      //将首先通过ClassLoader.getResources("")加载目录,      //将只返回文件系统的类路径不返回jar的跟路径      //然后进行遍历模式匹配      Resource[] resources = resolver.getResources("classpath*:asm-*.txt");      Assert.assertTrue(resources.length == 0);      //将通过ClassLoader.getResources("asm-license.txt")加载      //asm-license.txt存在于com.springsource.net.sf.cglib-2.2.0.jar      resources = resolver.getResources("classpath*:asm-license.txt");      Assert.assertTrue(resources.length > 0);           //将只加载文件系统类路径匹配的Resource      resources = resolver.getResources("classpath*:LICENS*");      Assert.assertTrue(resources.length == 1);  }  


对于“resolver.getResources("classpath*:asm-*.txt");”,由于在项目“resources”目录下没有所以应该返回0个资源;“resolver.getResources("classpath*:asm-license.txt");”将返回jar包里的Resource;“resolver.getResources("classpath*:LICENS*");”,因为将只返回文件系统类路径资源,所以返回1个资源。

因此在通过前缀“classpath*”加载通配符路径时,必须包含一个根目录才能保证加载的资源是所有的,而不是部分。

http://jinnianshilongnian.iteye.com/blog/1416322
分析得非常好,特别是对直接放在根路径下的文件的分析,这是很容易出错的地方。

读书人网 >编程

热点推荐